package com.webank.authmanager.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionEncoder;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Address;
import org.fisco.bcos.sdk.abi.datatypes.Bool;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint16;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple7;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class AuthManager extends Contract {
    protected static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506040516200d8ff3803806200d8ff83398101806040528101908080519060200190929190805182019291906020018051820192919060200180519060200190929190505050606460018190555062000069620004a6565b604051809103906000f08015801562000086573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd6d5234051966a63c01d2f905f4d6a60242a27a434cc31f991c190d273b269bb30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28360138190555060016013541415620001955762000194620001cd64010000000002620099ae176401000000009004565b5b60026013541415620001c357620001c28383836200020f64010000000002620099f0176401000000009004565b5b5050505062000671565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f22d9bc58484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620002d2578082015181840152602081019050620002b5565b50505050905001838103825285818151815260200191508051906020019060200280838360005b8381101562000316578082015181840152602081019050620002f9565b5050505090500195505050505050602060405180830381600087803b1580156200033f57600080fd5b505af115801562000354573d6000803e3d6000fd5b505050506040513d60208110156200036b57600080fd5b810190808051906020019092919050505050826005908051906020019062000395929190620004b7565b508160069080519060200190620003ae92919062000546565b5080600760006101000a81548161ffff021916908361ffff1602179055507f0c27cf921fb08e618d545975960b46fc31890400829313864b4982cc0033ee2d8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620004475780820151818401526020810190506200042a565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156200048b5780820151818401526020810190506200046e565b505050509050019550505050505060405180910390a1505050565b604051611430806200c4cf83390190565b82805482825590600052602060002090810192821562000533579160200282015b82811115620005325782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620004d8565b5b509050620005429190620005f7565b5090565b82805482825590600052602060002090600f01601090048101928215620005e45791602002820160005b83821115620005b257835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000570565b8015620005e25782816101000a81549061ffff0219169055600201602081600101049283019260010302620005b2565b505b509050620005f391906200063d565b5090565b6200063a91905b808211156200063657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620005fe565b5090565b90565b6200066e91905b808211156200066a57600081816101000a81549061ffff02191690555060010162000644565b5090565b90565b61be4e80620006816000396000f300608060405260043610610288576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306b586231461028d57806309bfe16c146102d05780630b81604514610313578063116d09ee146103f25780631d0138d7146104095780631f188efb146105385780632215c0e6146105fb57806331bf4a381461072a57806332b8145f1461076d578063397bc52a146107b05780633d829b69146108975780633dca6f2a146108ee5780633f8b0930146109bd57806345f50894146109ed57806349dee2c714610a305780634b39817f14610aff578063502a5c7f14610b9c578063522d0fbc14610c0857806364e5e75b14610c915780636ad1c86d14610d545780636e9960c314610d6b5780637625f2cb14610dc2578063768de3bb14610df1578063784210b614610e7a5780637b590c0b14610f6f578063857c536514610f8657806390bd6a9514610fb157806393c4105014610fc8578063943acab714610fdf578063a740e58d146110a2578063a7ea3ab6146110d2578063ab6c173d14611173578063abef281e146111b6578063ac6c525114611247578063b1675e4f146112b5578063b3a26939146112cc578063b3eb9b5114611370578063b681590e146113f9578063b6db75a01461143c578063ba5b17841461146b578063bc558e871461153a578063bcaaaf80146115b4578063c1e4e0911461162a578063c715c89d146116d3578063ccf7e60d14611716578063d428cffc1461172d578063d77652f714611784578063d8835cfe14611866578063f043f9ff1461195b578063f1db4c5c14611a2a578063f4d3b69314611ab3578063f7dbc51214611af6578063f86afe8414611b62578063fa05dd5714611bd8575b600080fd5b34801561029957600080fd5b506102ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c09565b005b3480156102dc57600080fd5b50610311600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d49565b005b34801561031f57600080fd5b5061033e60048036038101908080359060200190929190505050611ee5565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b3480156103fe57600080fd5b5061040761201c565b005b34801561041557600080fd5b5061041e61229e565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610494578082015181840152602081019050610479565b50505050905090810190601f1680156104c15780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156104fa5780820151818401526020810190506104df565b50505050905090810190601f1680156105275780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561054457600080fd5b5061054d612489565b6040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b838110156105a2578082015181840152602081019050610587565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156105e45780820151818401526020810190506105c9565b505050509050019550505050505060405180910390f35b34801561060757600080fd5b506106106125b0565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561068657808201518184015260208101905061066b565b50505050905090810190601f1680156106b35780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156106ec5780820151818401526020810190506106d1565b50505050905090810190601f1680156107195780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561073657600080fd5b5061076b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061279b565b005b34801561077957600080fd5b506107ae600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612944565b005b3480156107bc57600080fd5b5061087d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612c9c565b604051808215151515815260200191505060405180910390f35b3480156108a357600080fd5b506108ac612e11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108fa57600080fd5b506109bb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019082018035906020019080","80601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612e37565b005b3480156109c957600080fd5b506109eb600480360381019080803560ff169060200190929190505050612f0b565b005b3480156109f957600080fd5b50610a2e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f93565b005b348015610a3c57600080fd5b50610afd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613194565b005b348015610b0b57600080fd5b50610b146134fe565b60405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b83811015610b60578082015181840152602081019050610b45565b50505050905090810190601f168015610b8d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610ba857600080fd5b50610bb1613634565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610bf4578082015181840152602081019050610bd9565b505050509050019250505060405180910390f35b348015610c1457600080fd5b50610c8f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613645565b005b348015610c9d57600080fd5b50610ca661392a565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d18578082015181840152602081019050610cfd565b50505050905090810190601f168015610d455780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610d6057600080fd5b50610d69613a73565b005b348015610d7757600080fd5b50610d80613c5a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dce57600080fd5b50610dd7613c83565b604051808215151515815260200191505060405180910390f35b348015610dfd57600080fd5b50610e78600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613d9c565b005b348015610e8657600080fd5b50610ebb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614081565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b348015610f7b57600080fd5b50610f8461416a565b005b348015610f9257600080fd5b50610f9b6143c9565b6040518082815260200191505060405180910390f35b348015610fbd57600080fd5b50610fc66143d3565b005b348015610fd457600080fd5b50610fdd6145a7565b005b348015610feb57600080fd5b50610ff4614950565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561106657808201518184015260208101905061104b565b50505050905090810190601f1680156110935780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156110ae57600080fd5b506110d0600480360381019080803560ff169060200190929190505050614a99565b005b3480156110de57600080fd5b50611159600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614b21565b604051808215151515815260200191505060405180910390f35b34801561117f57600080fd5b506111b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614be4565b005b3480156111c257600080fd5b5061121d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050614e8f565b604051808460ff1660ff168152602001838152602001828152602001935050505060405180910390f35b34801561125357600080fd5b50611288600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614f2c565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b3480156112c157600080fd5b506112ca615039565b005b3480156112d857600080fd5b50611356600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615220565b604051808215151515815260200191505060405180910390f35b34801561137c57600080fd5b506113f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506153dd565b005b34801561140557600080fd5b5061143a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506154af565b005b34801561144857600080fd5b50611451615637565b604051808215151515815260200191505060405180910390f35b34801561147757600080fd5b50611538600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061568e565b005b34801561154657600080fd5b5061156560048036038101908080359060200190929190505050615762565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156115c057600080fd5b50611628600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff16906020019092919050505061584f565b005b34801561163657600080fd5b506116d16004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050615921565b005b3480156116df57600080fd5b50611714600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615bcd565b005b34801561172257600080fd5b5061172b615d65565b005b34801561173957600080fd5b50611742615fe7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561179057600080fd5b506117b2600480360381019080803560ff169060200190929190505050616011565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561187257600080fd5b506118a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061607f565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561196757600080fd5b50611a28600480360381019080803573ffffffffffffff","ffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050616168565b005b348015611a3657600080fd5b50611ab1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506164d2565b005b348015611abf57600080fd5b50611af4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506165a4565b005b348015611b0257600080fd5b50611b0b616738565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015611b4e578082015181840152602081019050611b33565b505050509050019250505060405180910390f35b348015611b6e57600080fd5b50611bd6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050616749565b005b348015611be457600080fd5b50611c07600480360381019080803561ffff1690602001909291905050506169e2565b005b6000611c13613c83565b1515611c87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515611cd857600080fd5b611ce181616bfa565b507f82c2f0d91d22bfb8e26f4299be0e648fdb4b0423222f01c3ae22246448f4800d82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600080611d54613c83565b1515611dc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141515611e1657600080fd5b611e22600b6000616f1c565b9150915080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e75600c84616f4c565b7fd4f08b86ca8b49e744dd07c80d43eba92b8add28d15bf6ad2f930a22bd3f02298382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b600080600080600080600080600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663f28676f46040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160e060405180830381600087803b158015611f8b57600080fd5b505af1158015611f9f573d6000803e3d6000fd5b505050506040513d60e0811015611fb557600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975097509750975097509750975050919395979092949650565b612024613c83565b1515612098576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000600460008360ff1660ff16815260200190815260200160002054141515156120c357600080fd5b6120e5600460008360ff1660ff1681526020019081526020016000205461715f565b15156120f057600080fd5b612251601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121ac5780601f10612181576101008083540402835291602001916121ac565b820191906000526020600020905b81548152906001019060200180831161218f57829003601f168201915b5050505050601e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122475780601f1061221c57610100808354040283529160200191612247565b820191906000526020600020905b81548152906001019060200180831161222a57829003601f168201915b5050505050617367565b612273600460008360ff1660ff16815260200190815260200160002054617890565b151561227e57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60006060806122ab613c83565b151561231f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d601e818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123db5780601f106123b0576101008083540402835291602001916123db565b820191906000526020600020905b8154815290600101906020018083116123be57829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124775780601f1061244c57610100808354040283529160200191612477565b820191906000526020600020905b81548152906001019060200180831161245a57829003601f168201915b50505050509050925092509250909192565b606080600060056006600760009054906101000a900461ffff168280548060200260200160405190810160405280929190818152602001828054801561252457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116124da575b505050505092508180548060200260200160405190810160405280929190818152602001828054801561259e57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125655790505b50505050509150925092509250909192565b60006060806125bd613c83565b1515612631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660186019818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126ed5780601f106126c2576101008083540402835291602001916126ed565b820191906000526020600020905b8154815290600101906020018083116126d057829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127895780601f1061275e57610100808354040283529160200191612789565b820191906000526020600020905b81548152906001019060200180831161276c57829003601f168201915b50505050509050925092509250909192565b60006127a5613c83565b1515612819576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b6128dc81616bfa565b507fff56a9fd183513422e403a8f1fa839cbf88bec53a3a2e4220758bc1a5ee22bbd82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b60008061294f613c83565b15156129c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401","8080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600082111515612a1457600080fd5b612a1e8284617a7a565b612a29600f84617c33565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050600090505b600580549050811015612c34578273ffffffffffffffffffffffffffffffffffffffff16600582815481101515612aa157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c27576005600160058054905003815481101515612aff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481101515612b3957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600160068054905003815481101515612b9857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600682815481101515612bcb57fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506005805480919060019003612c0f9190619629565b506006805480919060019003612c259190619655565b505b8080600101915050612a6e565b7fc57d505fc7b7af32e8113bebe7f23b591534218bde0b00c48189eab87629bef383604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b60006011846040518082805190602001908083835b602083101515612cd65780518252602082019150602081019050602083039250612cb1565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836040518082805190602001908083835b602083101515612d815780518252602082019150602081019050602083039250612d5c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690509392505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612efb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b612f06838383617367565b505050565b612f13613c83565b1515612f87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b612f9081617e72565b50565b6000612f9d613c83565b1515613011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156130cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b6130d481617890565b15156130df57600080fd5b6130ea600c83617c33565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557f47a2f9e0452e8f312a3cdc6795d16c324a810d1feffbc30c7c3b40d95fee207d82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b61319c613c83565b1515613210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000806000600460008560ff1660ff168152602001908152602001600020541415156132a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6132b08333616f1c565b9150915060008111151561332c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601d90805190602001906133a192919061968f565b5083601e90805190602001906133b892919061968f565b507f4cd07ab46f28195edb83c2f1cba6fbc3c8115e38fec7024e50aa5c9f25c83380868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613453578082015181840152602081019050613438565b50505050905090810190601f1680156134805780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156134b957808201518184015260208101905061349e565b50505050905090810190601f1680156134e65780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6060600061350a613c83565b151561357e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6014601560009054906101000a900460ff16818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136255780601f106135fa57610100808354040283529160200191613625565b820191906000526020600020905b81548152906001019060200180831161360857829003601f168201915b50505050509150915091509091565b6060613640600f617f25565b905090565b61364d613c83565b15156136c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000806000600460008560ff1660ff16815260200190815260200160002054141515613757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6137618333616f1c565b915091506000811115156137dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601b908051906020019061385292919061968f565b507f213deb73372a11fd3bafce3da5bba8fe2586c11000b2ea9650f630a643aa4c1d8585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156138e85780820151818401526020810190506138cd565b50505050905090810190601f1680156139155780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b60006060613936613c83565b15156139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f75206172","65206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166016808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613a645780601f10613a3957610100808354040283529160200191613a64565b820191906000526020600020905b815481529060010190602001808311613a4757829003601f168201915b50505050509050915091509091565b613a7b613c83565b1515613aef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000600460008360ff1660ff1681526020019081526020016000205414151515613b1a57600080fd5b613b3c600460008360ff1660ff1681526020019081526020016000205461715f565b1515613b4757600080fd5b613c0d601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613c035780601f10613bd857610100808354040283529160200191613c03565b820191906000526020600020905b815481529060010190602001808311613be657829003601f168201915b5050505050618010565b613c2f600460008360ff1660ff16815260200190815260200160002054617890565b1515613c3a57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac6c5251336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015613d4457600080fd5b505af1158015613d58573d6000803e3d6000fd5b505050506040513d6040811015613d6e57600080fd5b8101908080519060200190929190805190602001909291905050509150915060008261ffff16119250505090565b613da4613c83565b1515613e18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000806000600460008560ff1660ff16815260200190815260200160002054141515613eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b613eb88333616f1c565b91509150600081111515613f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360169080519060200190613fa992919061968f565b507f96f8160809f811b00413e726fc32482b3b267786da2a9282a72961a89e6061308585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561403f578082015181840152602081019050614024565b50505050905090810190601f16801561406c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b600080600080600080600080600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515614147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b61415081611ee5565b975097509750975097509750975050919395979092949650565b614172613c83565b15156141e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000600460008360ff1660ff168152602001908152602001600020541415151561421157600080fd5b614233600460008360ff1660ff1681526020019081526020016000205461715f565b151561423e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663793e6410600760029054906101000a900461ffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808261ffff1661ffff168152602001915050602060405180830381600087803b1580156142e757600080fd5b505af11580156142fb573d6000803e3d6000fd5b505050506040513d602081101561431157600080fd5b810190808051906020019092919050505050600760029054906101000a900461ffff16600760006101000a81548161ffff021916908361ffff1602179055507f66b2f7272f730d49f4ff536261c2af5b2e3f63570991a420e8ebc3d5da5aeb7c60405160405180910390a161439e600460008360ff1660ff16815260200190815260200160002054617890565b15156143a957600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000601354905090565b6143db613c83565b151561444f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000600460008360ff1660ff168152602001908152602001600020541415151561447a57600080fd5b61449c600460008360ff1660ff1681526020019081526020016000205461715f565b15156144a757600080fd5b61455a60148054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156145405780601f1061451557610100808354040283529160200191614540565b820191906000526020600020905b81548152906001019060200180831161452357829003601f168201915b5050505050601560009054906101000a900460ff166183bc565b61457c600460008360ff1660ff16815260200190815260200160002054617890565b151561458757600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6145af613c83565b1515614623576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60026000600460008360ff1660ff168152602001908152602001600020541415151561464e57600080fd5b614670600460008360ff1660ff1681526020019081526020016000205461715f565b151561467b57600080fd5b61468361970f565b604051809103906000f08015801561469f573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f22d9bc56009600a600760009054906101000a900461ffff166040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff16815260200183810383528681815481526020019150805480156147eb57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116147a1575b5050838103825285818154815260200191508054801561485257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116148195790505b505095505050505050602060405180830381600087803b15801561487557600080fd5b505af1158015614889573d6000803e3d6000fd5b505050506040513d602081101561489f57600080fd5b810190808051906020019092919050505050600960059080546148c392919061971f565b50600a60069080546148d6929190619771565b507fa9c140686858bb7355044264151d848504861a91a2f7659ee950ee11e86dec0d60405160405180910390a1614925600460008360ff1660ff16815260200190815260200160002054617890565b151561493057600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000606061495c613c83565b15156149d0576040517f08c379a00000000000000000000000000000000000000000","000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614a8a5780601f10614a5f57610100808354040283529160200191614a8a565b820191906000526020600020905b815481529060010190602001808311614a6d57829003601f168201915b50505050509050915091509091565b614aa1613c83565b1515614b15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b614b1e8161863b565b50565b60006011836040518082805190602001908083835b602083101515614b5b5780518252602082019150602081019050602083039250614b36565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000614bee613c83565b1515614c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515614d1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b614d2681836186c4565b614d31600c83617c33565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560058290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060066001908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff160217905550507f238498021d519fc2d1325fb79524857f9a5c00286a5e71c1541a43561fec98d682604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000806000806011856040518082805190602001908083835b602083101515614ecd5780518252602082019150602081019050602083039250614ea8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090508060000160009054906101000a900460ff1681600101548260020154935093509350509193909250565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac6c5251846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015614feb57600080fd5b505af1158015614fff573d6000803e3d6000fd5b505050506040513d604081101561501557600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b615041613c83565b15156150b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000600460008360ff1660ff16815260200190815260200160002054141515156150e057600080fd5b615102600460008360ff1660ff1681526020019081526020016000205461715f565b151561510d57600080fd5b6151d3601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156151c95780601f1061519e576101008083540402835291602001916151c9565b820191906000526020600020905b8154815290600101906020018083116151ac57829003601f168201915b505050505061887d565b6151f5600460008360ff1660ff16815260200190815260200160002054617890565b151561520057600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020935060118460405180828054600181600116156101000203166002900480156153165780601f106152f4576101008083540402835291820191615316565b820191906000526020600020905b815481529060010190602001808311615302575b50509150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff16141561535157600194506153d2565b8260000160009054906101000a900460ff1691508260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600160ff168260ff1614156153cd578094506153d2565b801594505b505050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156154a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6154ab8282618010565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515615575576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f81c40df530c7b3f6fe84403f586f41d461f96342dacbcd44ac6f0eb80f88970460405160405180910390a35050565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515615752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b61575d838383618cb8565b505050565b60008060006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16636900187d6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561580057600080fd5b505af1158015615814573d6000803e3d6000fd5b505050506040513d604081101561582a57600080fd5b8101908080519060200190929190805190602001909291905050509250925050915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515615913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b61591d82826183bc565b5050565b615929613c83565b151561599d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f","7273000000000000000000000081525060200191505060405180910390fd5b60026000806000600460008560ff1660ff16815260200190815260200160002054141515615a33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b615a3d8333616f1c565b91509150600081111515615ab9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff168152602001908152602001600020819055508460099080519060200190615aed9291906197d1565b5083600a9080519060200190615b0492919061985b565b507fb1a0082653767af00d5a7f1d965bdbf8b8ad98fd31f08c7bfe4c37ff3ca4c3db8585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015615b6f578082015181840152602081019050615b54565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015615bb1578082015181840152602081019050615b96565b5050505090500194505050505060405180910390a15050505050565b6000615bd7613c83565b1515615c4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515615c9c57600080fd5b615ca581617890565b1515615cb057600080fd5b615cbb600f83617c33565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557fd14f0423caf2115c9e3c41af1f60605c54594f1b5efaf7a3f6b2a7c48cb0841b82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b615d6d613c83565b1515615de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000600460008360ff1660ff1681526020019081526020016000205414151515615e0c57600080fd5b615e2e600460008360ff1660ff1681526020019081526020016000205461715f565b1515615e3957600080fd5b615f9a601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660188054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615ef55780601f10615eca57610100808354040283529160200191615ef5565b820191906000526020600020905b815481529060010190602001808311615ed857829003601f168201915b505050505060198054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615f905780601f10615f6557610100808354040283529160200191615f90565b820191906000526020600020905b815481529060010190602001808311615f7357829003601f168201915b5050505050618cb8565b615fbc600460008360ff1660ff16815260200190815260200160002054617890565b1515615fc757600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600080600460008a60ff1660ff168152602001908152602001600020541415151561604457600080fd5b616066600460008a60ff1660ff16815260200190815260200160002054611ee5565b9650965096509650965096509650919395979092949650565b600080600080600080600080600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515616145576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b61614e81611ee5565b975097509750975097509750975050919395979092949650565b616170613c83565b15156161e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000806000600460008560ff1660ff1681526020019081526020016000205414151561627a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6162848333616f1c565b91509150600081111515616300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846018908051906020019061637592919061968f565b50836019908051906020019061638c92919061968f565b507fd0aaaab8a852d02282f274fca46859a93629651d277f7070e6766f93a82aee39868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561642757808201518184015260208101905061640c565b50505050905090810190601f1680156164545780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561648d578082015181840152602081019050616472565b50505050905090810190601f1680156164ba5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515616596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6165a0828261887d565b5050565b6000806165af613c83565b1515616623576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561667157600080fd5b61667d600c6000616f1c565b9150915080600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506166d0600f84616f4c565b7fbe8e2e41ba1065826815fcb05959316e6e6ba9b3b447de9d59c436620b0c57ad83604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6060616744600c617f25565b905090565b616751613c83565b15156167c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000806000600460008560ff1660ff1681526020019081526020016000205414151561685b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6168658333616f1c565b915091506000811115156168e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff16815260200190815260200160002081905550846014908051906020019061691592919061968f565b5083601560006101000a81548160ff021916908360ff1602179055507f357b9926c35739dbd0784f173b325b56d856a8560b4a82b0c2855e2a6303d86a858560405180806020018360ff1660ff16815260200182810382528481815181526020019150805190602001","9080838360005b838110156169a0578082015181840152602081019050616985565b50505050905090810190601f1680156169cd5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b6169ea613c83565b1515616a5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000806000600460008560ff1660ff16815260200190815260200160002054141515616af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b616afe8333616f1c565b91509150600081111515616b7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555083600760026101000a81548161ffff021916908361ffff1602179055507fbf78b5f34aec236b9208ca42f92bd676165c68355cef1758e905daf75cce13aa84604051808261ffff1661ffff16815260200191505060405180910390a150505050565b600080600080600080600080339650600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac6c5251886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015616cc557600080fd5b505af1158015616cd9573d6000803e3d6000fd5b505050506040513d6040811015616cef57600080fd5b81019080805190602001909291908051906020019092919050505095509550600193506000925060008661ffff161415616d2c5760009350616e86565b600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915060008273ffffffffffffffffffffffffffffffffffffffff161415616d8a5760009350616e85565b8190508073ffffffffffffffffffffffffffffffffffffffff1663e560ca4388886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001925050506040805180830381600087803b158015616e3757600080fd5b505af1158015616e4b573d6000803e3d6000fd5b505050506040513d6040811015616e6157600080fd5b81019080805190602001909291908051906020019092919050505080945081955050505b5b8673ffffffffffffffffffffffffffffffffffffffff16897febe4dc679cdbfe16b4f5276752b8a8394e6eab05e565e44e0815fc8379ad3d37863060405180831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a383975050505050505050919050565b600080600160008154809291906001019190505550616f3e600154858561930d565b600154915091509250929050565b60008173ffffffffffffffffffffffffffffffffffffffff1614151515617001576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4c6962416464726573735365743a2076616c75652063616e277420626520307881526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61700b82826195da565b1515156170a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4c6962416464726573735365743a2076616c756520616c72656164792065786981526020017f73747320696e20746865207365742e000000000000000000000000000000000081525060400191505060405180910390fd5b816001018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600101805490508260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000806000806003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156171be5760009250617360565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16638c542ddf856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561726357600080fd5b505af1158015617277573d6000803e3d6000fd5b505050506040513d602081101561728d57600080fd5b8101908080519060200190929190505050905060011515811515141561735c576003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16847f410b46f567eb79383667e25a31d877045f2ac0dbd2315b1f6d85afe9455b89e930604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35b8092505b5050919050565b6000806011836040518082805190602001908083835b6020831015156173a2578051825260208201915060208101905060208303925061737d565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020915060008260000160009054906101000a900460ff1660ff1614151515617464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b836040518082805190602001908083835b60208310151561749a5780518252602082019150602081019050602083039250617475565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508160040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615156175db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f66756e6374696f6e206e6f74206578697374000000000000000000000000000081525060200191505060405180910390fd5b60008260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055508160020160008154809291906001900391905055506020604051908101604052806000815250601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020908051906020019061774b92919061968f565b507f99733eb68fd342df4ae81ac2f9d4b1f5fa20fb9f6f2c398224e3a65726b6d78c858585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156177e65780820151818401526020810190506177cb565b50505050905090810190601f1680156178135780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561784c578082015181840152602081019050617831565b50505050905090810190601f1680156178795780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15050505050565b60008060006001915060006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156178f45760009150617a09565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16632e49d78b60026040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260ff16815260","2001915050600060405180830381600087803b15801561799d57600080fd5b505af11580156179b1573d6000803e3d6000fd5b5050505060006003600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b811515847f93d40816dd86538ee527eee904fe366f1a5377b07417493a74dfb9b163fd80f130604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38192505050919050565b81617a848161715f565b1515617b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631400a8138360006040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff16815260200192505050602060405180830381600087803b158015617be857600080fd5b505af1158015617bfc573d6000803e3d6000fd5b505050506040513d6020811015617c1257600080fd5b810190808051906020019092919050505050617c2d81617890565b50505050565b6000806000617c4285856195da565b1515617cdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f4c6962416464726573735365743a2076616c756520646f65736e27742065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60018560000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054039250600185600101805490500391508460010182815481101515617d4157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808560010184815481101515617d8057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828560000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905584600101805480919060019003617e6a9190619629565b505050505050565b6000600460008360ff1660ff1681526020019081526020016000205414151515617e9b57600080fd5b617ebd600460008360ff1660ff16815260200190815260200160002054617890565b1515617ec857600080fd5b600460008260ff1660ff168152602001908152602001600020600090557f1e0d9ed048bfdd82052030309dd50f1fc735ed6c9fe537342e3d7e85babbfb5381604051808260ff1660ff16815260200191505060405180910390a150565b60608060008360010180549050604051908082528060200260200182016040528015617f605781602001602082028038833980820191505090505b5091505b8360010180549050811015618006578360010181815481101515617f8457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181101515617fbd57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050617f64565b8192505050919050565b60006011826040518082805190602001908083835b60208310151561804a5780518252602082019150602081019050602083039250618025565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561813f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b60006011836040518082805190602001908083835b6020831015156181795780518252602082019150602081019050602083039250618154565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011826040518082805190602001908083835b60208310151561823b5780518252602082019150602081019050602083039250618216565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016000815480929190600190039190505550816040518082805190602001908083835b6020831015156182b85780518252602082019150602081019050602083039250618293565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090507fbd44fc4687efc501b1a20f4a8e76687997039da8042078761466eec90daac81f8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561837c578082015181840152602081019050618361565b50505050905090810190601f1680156183a95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b606082905060008151141515156183d257600080fd5b60006011846040518082805190602001908083835b60208310151561840c57805182526020820191506020810190506020830392506183e7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff161415156184c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f67726f757020616c72656164792065786973740000000000000000000000000081525060200191505060405180910390fd5b6060604051908101604052808360ff1681526020016000815260200160008152506011846040518082805190602001908083835b60208310151561852157805182526020820191506020810190506020830392506184fc565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160010155604082015181600201559050507f08a003cf3299c03854125249ddce5f9e09a1fb1edf6b1550e71b6f8043030496838360405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b838110156185fb5780820151818401526020810190506185e0565b50505050905090810190601f1680156186285780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b6000600460008360ff1660ff168152602001908152602001600020541415151561866457600080fd5b618686600460008360ff1660ff16815260200190815260200160002054616bfa565b151561869157600080fd5b8060ff167f2b8c8ac1568d9f802f384796bb60ff3c14f6a7603c0ae9df88903b4cfdb95eef60405160405180910390a250565b816186ce8161715f565b1515618768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631400a8138360016040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff16815260200192505050602060405180830381600087803b15801561883257600080fd5b505af1158015618846573d6000803e3d6000fd5b505050506040513d602081101561885c57600080fd5b81019080805190602001909291905050505061887781617890565b50505050565b60006011826040518082805190602001908083835b6020831015156188b75780518252602082019150602081019050602083039250618892565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff1614151515618974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b60118160405180828051","90602001908083835b6020831015156189ac5780518252602082019150602081019050602083039250618987565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515618aa2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e7420616c7265616479206164640000000000000000000000000081525060200191505060405180910390fd5b60016011826040518082805190602001908083835b602083101515618adc5780518252602082019150602081019050602083039250618ab7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011816040518082805190602001908083835b602083101515618b9e5780518252602082019150602081019050602083039250618b79565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101600081548092919060010191905055507f1f4e521a7c2a6c34638ef19b691ef76b750a556070ae4b91b925d3122f8727bd8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015618c79578082015181840152602081019050618c5e565b50505050905090810190601f168015618ca65780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60008060606011846040518082805190602001908083835b602083101515618cf55780518252602082019150602081019050602083039250618cd0565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff1614151515618db7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b846040518082805190602001908083835b602083101515618ded5780518252602082019150602081019050602083039250618dc8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16151515618f2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f66756e6374696f6e20616c72656164792061646400000000000000000000000081525060200191505060405180910390fd5b601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156190515780601f1061902657610100808354040283529160200191619051565b820191906000526020600020905b81548152906001019060200180831161903457829003601f168201915b505050505090506000815114151561906857600080fd5b60018360040160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550826002016000815480929190600101919050555083601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002090805190602001906191c792919061968f565b507f19ec4d1efc16f88df62edeaa6cf89b178f2bed446087fa19ab61f2c3a1d927c9868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015619262578082015181840152602081019050619247565b50505050905090810190601f16801561928f5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156192c85780820151818401526020810190506192ad565b50505050905090810190601f1680156192f55780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b60008060008060006003600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156193a4576003600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508293506195d0565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f3c81606040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561942a57600080fd5b505af115801561943e573d6000803e3d6000fd5b505050506040513d602081101561945457600080fd5b8101908080519060200190929190505050915086868684619473619905565b808581526020018460ff1660ff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001945050505050604051809103906000f0801580156194e8573d6000803e3d6000fd5b509050806003600089815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff168660ff16887f501994f520a3585d1c71ac106183d6fcb8a825b388c60e3ac9ef7ec1e1c866fc8530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a48093505b5050509392505050565b6000808360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b8154818355818111156196505781836000526020600020918201910161964f9190619915565b5b505050565b81548183558181111561968a57600f016010900481600f016010900483600052602060002091820191016196899190619915565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106196d057805160ff19168380011785556196fe565b828001600101855582156196fe579182015b828111156196fd5782518255916020019190600101906196e2565b5b50905061970b9190619915565b5090565b60405161143080619c7983390190565b8280548282559060005260206000209081019282156197605760005260206000209182015b8281111561975f578254825591600101919060010190619744565b5b50905061976d919061993a565b5090565b82805482825590600052602060002090600f016010900481019282156197c057600052602060002091600f016010900482015b828111156197bf5782548255916001019190600101906197a4565b5b5090506197cd919061997d565b5090565b82805482825590600052602060002090810192821561984a579160200282015b828111156198495782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906197f1565b5b509050619857919061993a565b5090565b82805482825590600052602060002090600f016010900481019282156198f45791602002820160005b838211156198c457835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302619884565b80156198f25782816101000a81549061ffff02191690556002016020816001010492830192600103026198c4565b505b509050619901919061997d565b5090565b604051610d7a8061b0a983390190565b61993791905b8082111561993357600081600090555060010161991b565b5090565b90565b61997a91905b8082111561997657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101619940565b5090565b90565b61","99ab91905b808211156199a757600081816101000a81549061ffff021916905550600101619983565b5090565b90565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f22d9bc58484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619ab1578082015181840152602081019050619a96565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619af3578082015181840152602081019050619ad8565b5050505090500195505050505050602060405180830381600087803b158015619b1b57600080fd5b505af1158015619b2f573d6000803e3d6000fd5b505050506040513d6020811015619b4557600080fd5b8101908080519060200190929190505050508260059080519060200190619b6d9291906197d1565b508160069080519060200190619b8492919061985b565b5080600760006101000a81548161ffff021916908361ffff1602179055507f0c27cf921fb08e618d545975960b46fc31890400829313864b4982cc0033ee2d8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619c1b578082015181840152602081019050619c00565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619c5d578082015181840152602081019050619c42565b505050509050019550505050505060405180910390a150505056006080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af40351461009e5780631400a813146100e1578063793e64101461014a5780637f3c816014610193578063ac6c5251146101c6578063b2bdfa7b14610234578063d428cffc1461028b578063d58846371461034e578063f22d9bc5146103e8575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b50610130600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610676565b604051808215151515815260200191505060405180910390f35b34801561015657600080fd5b50610179600480360381019080803561ffff16906020019092919050505061080c565b604051808215151515815260200191505060405180910390f35b34801561019f57600080fd5b506101a861091e565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156101d257600080fd5b50610207600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610932565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561024057600080fd5b50610249610963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561029757600080fd5b506102a0610988565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102f55780820151818401526020810190506102da565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561033757808201518184015260208101905061031c565b505050509050019550505050505060405180910390f35b34801561035a57600080fd5b506103ce60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff1690602001909291905050506109be565b604051808215151515815260200191505060405180910390f35b3480156103f457600080fd5b5061049d6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610cb2565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a450565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61077883836001610ff89092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b600460009054906101000a900461ffff1681565b60008061094983600161119b90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060608060608061099a6001611229565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610aab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551111515610b24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610ca657610bf88582815181101515610bdc57fe5b90602001906020020151856001610ff89092919063ffffffff16565b8481815181101515610c0657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff","3e4352ab2b760d8530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610bc2565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610db1575083518551145b1515610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610fec5760008482815181101515610e6057fe5b9060200190602002015161ffff16111515610ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b610f278582815181101515610ef457fe5b906020019060200201518583815181101515610f0c57fe5b906020019060200201516001610ff89092919063ffffffff16565b8481815181101515610f3557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8583815181101515610f8457fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610e47565b60019150509392505050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561115057836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611195565b81846002016001830381548110151561116557fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b50505050565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915084600201600183038154811015156111f857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b6060808260010183600201818054806020026020016040519081016040528092919081815260200182805480156112b557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161126b575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561132f57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116112f65790505b50505050509050915091509150915600a165627a7a7230582027981c2859680ffb310f12ceaeceb3f96360967f4062192ce5d5719236588b2e0029608060405234801561001057600080fd5b50604051608080610d7a83398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a48360018190555080600260006101000a81548161ffff021916908361ffff1602179055506000600460006101000a81548161ffff021916908361ffff1602179055506000600460026101000a81548160ff021916908360ff16021790555082600460036101000a81548160ff021916908360ff160217905550816004806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050610bab806101cf6000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af40351461009e57806325fee005146100e15780632e49d78b1461013c5780633037b2b01461016c5780636900187d146101c35780638c542ddf14610227578063b2bdfa7b1461026c578063e560ca43146102c3578063f28676f41461033b575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610404565b005b3480156100ed57600080fd5b50610122600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105c3565b604051808215151515815260200191505060405180910390f35b34801561014857600080fd5b5061016a600480360381019080803560ff169060200190929190505050610619565b005b34801561017857600080fd5b50610181610768565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101cf57600080fd5b506101d861078d565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561023357600080fd5b50610252600480360381019080803590602001909291905050506107ca565b604051808215151515815260200191505060405180910390f35b34801561027857600080fd5b506102816107ff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102cf57600080fd5b50610312600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610824565b60405180831515151581526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561034757600080fd5b50610350610af2565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156104ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a450565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3073ff","ffffffffffffffffffffffffffffffffffffff168160ff167fc3208bfd1cf6c6d18dfcf3da08adc1ea4dcb0962c70f55f953cb316b359af5f660405160405180910390a380600460026101000a81548160ff021916908360ff16021790555050565b6004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600460039054906101000a900460ff166004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff1610159050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000151581151514156109fb5783600460009054906101000a900461ffff1601600460006101000a81548161ffff021916908361ffff1602179055506001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610a17565b6000600460009054906101000a900461ffff1692509250610aea565b8361ffff168573ffffffffffffffffffffffffffffffffffffffff167f85ff8897265d8f8340b0d145d58b1d439a4bc446f49d9f137162cb672edd31fe30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff16101515610ad257610ad16001610619565b5b6001600460009054906101000a900461ffff16925092505b509250929050565b60008060008060008060006001546004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900461ffff1630600460009054906101000a900461ffff16600460039054906101000a900460ff16600460029054906101000a900460ff168393509650965096509650965096509650909192939495965600a165627a7a7230582024df33abf2537c396dd1c91596e5ad805e1c25e40b0a33e3f83c6ccb1e36b5da0029a165627a7a723058205bf6979d6265c4b1c7f8535f0f42d0de0708a7a74e3c213715d21ac04a2a3d8000296080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af40351461009e5780631400a813146100e1578063793e64101461014a5780637f3c816014610193578063ac6c5251146101c6578063b2bdfa7b14610234578063d428cffc1461028b578063d58846371461034e578063f22d9bc5146103e8575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b50610130600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610676565b604051808215151515815260200191505060405180910390f35b34801561015657600080fd5b50610179600480360381019080803561ffff16906020019092919050505061080c565b604051808215151515815260200191505060405180910390f35b34801561019f57600080fd5b506101a861091e565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156101d257600080fd5b50610207600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610932565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561024057600080fd5b50610249610963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561029757600080fd5b506102a0610988565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102f55780820151818401526020810190506102da565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561033757808201518184015260208101905061031c565b505050509050019550505050505060405180910390f35b34801561035a57600080fd5b506103ce60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff1690602001909291905050506109be565b604051808215151515815260200191505060405180910390f35b3480156103f457600080fd5b5061049d6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610cb2565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a450565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61077883836001610ff89092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b600460009054906101000a900461ffff1681565b60008061094983600161119b90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060608060608061099a6001611229565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610aab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220","697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551111515610b24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610ca657610bf88582815181101515610bdc57fe5b90602001906020020151856001610ff89092919063ffffffff16565b8481815181101515610c0657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610bc2565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610db1575083518551145b1515610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610fec5760008482815181101515610e6057fe5b9060200190602002015161ffff16111515610ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b610f278582815181101515610ef457fe5b906020019060200201518583815181101515610f0c57fe5b906020019060200201516001610ff89092919063ffffffff16565b8481815181101515610f3557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8583815181101515610f8457fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610e47565b60019150509392505050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561115057836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611195565b81846002016001830381548110151561116557fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b50505050565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915084600201600183038154811015156111f857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b6060808260010183600201818054806020026020016040519081016040528092919081815260200182805480156112b557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161126b575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561132f57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116112f65790505b50505050509050915091509150915600a165627a7a7230582027981c2859680ffb310f12ceaeceb3f96360967f4062192ce5d5719236588b2e0029"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    protected static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506040516200d8fe3803806200d8fe83398101806040528101908080519060200190929190805182019291906020018051820192919060200180519060200190929190505050606460018190555062000069620004a6565b604051809103906000f08015801562000086573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb77d5ab01b3f7208beac655a12b8bb6cdcfbb1a49eebb865c2e8ccfd7407909430604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28360138190555060016013541415620001955762000194620001cd64010000000002620099ad176401000000009004565b5b60026013541415620001c357620001c28383836200020f64010000000002620099ef176401000000009004565b5b5050505062000671565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea3c170c8484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620002d2578082015181840152602081019050620002b5565b50505050905001838103825285818151815260200191508051906020019060200280838360005b8381101562000316578082015181840152602081019050620002f9565b5050505090500195505050505050602060405180830381600087803b1580156200033f57600080fd5b505af115801562000354573d6000803e3d6000fd5b505050506040513d60208110156200036b57600080fd5b810190808051906020019092919050505050826005908051906020019062000395929190620004b7565b508160069080519060200190620003ae92919062000546565b5080600760006101000a81548161ffff021916908361ffff1602179055507fab88aac081194e202f78b52f9630ee711ed21111fd9c301de2d051725ae4cbab8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620004475780820151818401526020810190506200042a565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156200048b5780820151818401526020810190506200046e565b505050509050019550505050505060405180910390a1505050565b604051611430806200c4ce83390190565b82805482825590600052602060002090810192821562000533579160200282015b82811115620005325782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620004d8565b5b509050620005429190620005f7565b5090565b82805482825590600052602060002090600f01601090048101928215620005e45791602002820160005b83821115620005b257835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000570565b8015620005e25782816101000a81549061ffff0219169055600201602081600101049283019260010302620005b2565b505b509050620005f391906200063d565b5090565b6200063a91905b808211156200063657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620005fe565b5090565b90565b6200066e91905b808211156200066a57600081816101000a81549061ffff02191690555060010162000644565b5090565b90565b61be4d80620006816000396000f300608060405260043610610288576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630fa984821461028d57806312444ec41461031657806313c08e3f1461044557806316ae415b14610488578063275d1a7b146104cb57806328e9610c146105375780632bf10aea146105db5780632c0135e4146106aa57806331385259146106ed57806333d9230714610704578063412460f1146107a157806345e74752146107d157806348cef5311461081457806348fc7e04146108d75780634b9f6ef7146109785780634d85cca41461098f57806359d296a714610a205780635ea9106814610a4f5780635f1eaace14610a9257806363510d1a14610b555780636643f4b614610b98578063688ccaba14610c8d5780636a4bfff614610ce45780636bc00d2f14610db357806378416b9114610ee25780637c1a8d9514610f39578063854fd6401461101857806387a2fee41461105b578063881b171c146110b257806394ef5b431461119457806397162b7e146112005780639e1bbc8214611217578063a312dfb414611247578063a3c58317146112d0578063a63cb909146112e7578063a9c93e40146112fe578063aa69cc6e146113cd578063b64f7c3c14611476578063b9fa0678146114f0578063ba5e50e414611579578063c13ca7cf14611590578063c45cd174146115d3578063c77695e414611696578063cd685f4014611704578063d5083cf91461172f578063d93ff63914611824578063db56ab2f14611853578063db9a313614611884578063dd95fdf41461190d578063e296f72414611983578063f261cb2014611a52578063fccbbf5814611a69578063ffa747a814611adf578063ffaa048014611bc6575b600080fd5b34801561029957600080fd5b50610314600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611c09565b005b34801561032257600080fd5b5061032b611eee565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156103a1578082015181840152602081019050610386565b50505050905090810190601f1680156103ce5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156104075780820151818401526020810190506103ec565b50505050905090810190601f1680156104345780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561045157600080fd5b50610486600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d9565b005b34801561049457600080fd5b506104c9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061226d565b005b3480156104d757600080fd5b506104e06123f5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610523578082015181840152602081019050610508565b505050509050019250505060405180910390f35b34801561054357600080fd5b506105c1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612406565b604051808215151515815260200191505060405180910390f35b3480156105e757600080fd5b506106a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506125c3565b005b3480156106b657600080fd5b506106eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612697565b005b3480156106f957600080fd5b50610702612833565b005b34801561071057600080fd5b50610719612a1a565b60405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b8381101561076557808201518184015260208101905061074a565b50505050905090810190601f1680156107925780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156107ad57600080fd5b506107cf600480360381019080803560ff169060200190929190505050612b50565b005b3480156107dd57600080fd5b50610812600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd8565b005b34801561082057600080fd5b50610829612d81565b6040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b8381101561087e578082015181840152602081019050610863565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156108c05780820151818401526020810190506108a5565b505050509050019550505050505060405180910390f35b3480156108e357600080fd5b5061095e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ea8565b604051808215151515815260200191505060405180910390f35b348015610984","57600080fd5b5061098d612f6b565b005b34801561099b57600080fd5b506109f6600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506131ed565b604051808460ff1660ff168152602001838152602001828152602001935050505060405180910390f35b348015610a2c57600080fd5b50610a3561328a565b604051808215151515815260200191505060405180910390f35b348015610a5b57600080fd5b50610a90600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133a3565b005b348015610a9e57600080fd5b50610aa76135a4565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b19578082015181840152602081019050610afe565b50505050905090810190601f168015610b465780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610b6157600080fd5b50610b96600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136ed565b005b348015610ba457600080fd5b50610bd9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a45565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b348015610c9957600080fd5b50610ca2613b2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cf057600080fd5b50610db1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b57565b005b348015610dbf57600080fd5b50610dc8613c2b565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e3e578082015181840152602081019050610e23565b50505050905090810190601f168015610e6b5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610ea4578082015181840152602081019050610e89565b50505050905090810190601f168015610ed15780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b348015610eee57600080fd5b50610ef7613e16565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f4557600080fd5b50610f6460048036038101908080359060200190929190505050613e3c565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561102457600080fd5b50611059600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f73565b005b34801561106757600080fd5b5061107061421d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110be57600080fd5b506110e0600480360381019080803560ff169060200190929190505050614247565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b3480156111a057600080fd5b506111a96142b5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156111ec5780820151818401526020810190506111d1565b505050509050019250505060405180910390f35b34801561120c57600080fd5b506112156142c6565b005b34801561122357600080fd5b50611245600480360381019080803560ff16906020019092919050505061466f565b005b34801561125357600080fd5b506112ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506146f7565b005b3480156112dc57600080fd5b506112e56147c9565b005b3480156112f357600080fd5b506112fc6149b0565b005b34801561130a57600080fd5b506113cb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050614b84565b005b3480156113d957600080fd5b506114746004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050614eee565b005b34801561148257600080fd5b506114a16004803603810190808035906020019092919050505061519a565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156114fc57600080fd5b50611577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050615287565b005b34801561158557600080fd5b5061158e61556c565b005b34801561159c57600080fd5b506115d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506157ee565b005b3480156115df57600080fd5b506115e861592e565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561165a57808201518184015260208101905061163f565b50505050905090810190601f1680156116875780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156116a257600080fd5b506116d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615a77565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561171057600080fd5b50611719615b84565b6040518082815260200191505060405180910390f35b34801561173b57600080fd5b50611770600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615b8e565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561183057600080fd5b50611839615c77565b604051808215151515815260200191505060405180910390f35b34801561185f57600080fd5b50611882600480360381019080803561ffff169060200190929190505050615cce565b005b34801561189057600080fd5b5061190b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050615ee6565b005b34801561191957600080fd5b50611981600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050615f","b8565b005b34801561198f57600080fd5b50611a50600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050616251565b005b348015611a5e57600080fd5b50611a676165bb565b005b348015611a7557600080fd5b50611add600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff16906020019092919050505061681a565b005b348015611aeb57600080fd5b50611bac600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506168ec565b604051808215151515815260200191505060405180910390f35b348015611bd257600080fd5b50611c07600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050616a61565b005b611c1161328a565b1515611c85576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000806000600460008560ff1660ff16815260200190815260200160002054141515611d1b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b611d258333616bf9565b91509150600081111515611da1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601b9080519060200190611e16929190619628565b507f4f6c679cc7adb2e5f876f3b14d907bd86f65f6a2157f4d4dfaaad2453c54602a8585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611eac578082015181840152602081019050611e91565b50505050905090810190601f168015611ed95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b6000606080611efb61328a565b1515611f6f576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660186019818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561202b5780601f106120005761010080835404028352916020019161202b565b820191906000526020600020905b81548152906001019060200180831161200e57829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120c75780601f1061209c576101008083540402835291602001916120c7565b820191906000526020600020905b8154815290600101906020018083116120aa57829003601f168201915b50505050509050925092509250909192565b6000806120e461328a565b1515612158576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415156121a657600080fd5b6121b2600c6000616bf9565b9150915080600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612205600f84616c29565b7f65c9ee8f6e7f364137022369122efbf0b71821e5004b28fa19c7085bb5c2f50183604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612333576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2c3e4e8028f0b13aaee3d3936311da6537e190be78af2bb673e8989493c89bf960405160405180910390a35050565b6060612401600f616e3c565b905090565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020935060118460405180828054600181600116156101000203166002900480156124fc5780601f106124da5761010080835404028352918201916124fc565b820191906000526020600020905b8154815290600101906020018083116124e8575b50509150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff16141561253757600194506125b8565b8260000160009054906101000a900460ff1691508260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600160ff168260ff1614156125b3578094506125b8565b801594505b505050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612687576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b612692838383616f27565b505050565b6000806126a261328a565b1515612716576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561276457600080fd5b612770600b6000616bf9565b9150915080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127c3600c84616c29565b7f094f6d407e0c3893237774eee826054e1fc5510eee1956e15dd49e67121fa78e8382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b61283b61328a565b15156128af576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000600460008360ff1660ff16815260200190815260200160002054141515156128da57600080fd5b6128fc600460008360ff1660ff1681526020019081526020016000205461757c565b151561290757600080fd5b6129cd601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129c3578060","1f10612998576101008083540402835291602001916129c3565b820191906000526020600020905b8154815290600101906020018083116129a657829003601f168201915b5050505050617784565b6129ef600460008360ff1660ff16815260200190815260200160002054617b30565b15156129fa57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60606000612a2661328a565b1515612a9a576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6014601560009054906101000a900460ff16818054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b415780601f10612b1657610100808354040283529160200191612b41565b820191906000526020600020905b815481529060010190602001808311612b2457829003601f168201915b50505050509150915091509091565b612b5861328a565b1515612bcc576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b612bd581617d1a565b50565b6000612be261328a565b1515612c56576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515612d10576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b612d1981617da3565b507ffe13a70ba606b4de27146775908752132a04b8cb181f7796e8a902b4e68a6f7382604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b606080600060056006600760009054906101000a900461ffff1682805480602002602001604051908101604052809291908181526020018280548015612e1c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612dd2575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015612e9657602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612e5d5790505b50505050509150925092509250909192565b60006011836040518082805190602001908083835b602083101515612ee25780518252602082019150602081019050602083039250612ebd565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f7361328a565b1515612fe7576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000600460008360ff1660ff168152602001908152602001600020541415151561301257600080fd5b613034600460008360ff1660ff1681526020019081526020016000205461757c565b151561303f57600080fd5b6131a0601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130fb5780601f106130d0576101008083540402835291602001916130fb565b820191906000526020600020905b8154815290600101906020018083116130de57829003601f168201915b5050505050601e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156131965780601f1061316b57610100808354040283529160200191613196565b820191906000526020600020905b81548152906001019060200180831161317957829003601f168201915b50505050506180c5565b6131c2600460008360ff1660ff16815260200190815260200160002054617b30565b15156131cd57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000806000806011856040518082805190602001908083835b60208310151561322b5780518252602082019150602081019050602083039250613206565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090508060000160009054906101000a900460ff1681600101548260020154935093509350509193909250565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c77695e4336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b15801561334b57600080fd5b505af115801561335f573d6000803e3d6000fd5b505050506040513d604081101561337557600080fd5b8101908080519060200190929190805190602001909291905050509150915060008261ffff16119250505090565b60006133ad61328a565b1515613421576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156134db576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b6134e481617b30565b15156134ef57600080fd5b6134fa600c836185ee565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557f3c1cfe45ff6030e35e0d2ec7781707061c4bedc838df0d9d8fa42fb6a5e7672b82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600060606135b061328a565b1515613624576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166016808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136de5780601f106136b3576101008083540402835291602001916136de565b820191906000526020600020905b8154815290600101906020018083116136c157829003601f168201915b50505050509050915091509091565b6000806136f861328a565b151561376c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000821115156137bd57600080fd5b6137c7828461882d565b6137d2600f846185ee565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050600090505b6005805490508110156139dd578273ffffffffffffffffffffffffffffffffffffffff1660058281548110151561384a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139d05760056001600580549050038154811015156138a857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811015156138e257fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660016006805490500381548110151561394157fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660068281548110151561397457fe5b90600052602060002090","601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060058054809190600190036139b891906196a8565b5060068054809190600190036139ce91906196d4565b505b8080600101915050613817565b7f715cab32e650f389230a2d6c652f45d03643f9d6377268a3ceae49c80923578d83604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b600080600080600080600080600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515613b0b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b613b1481613e3c565b975097509750975097509750975050919395979092949650565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c1b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b613c268383836180c5565b505050565b6000606080613c3861328a565b1515613cac576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d601e818054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613d685780601f10613d3d57610100808354040283529160200191613d68565b820191906000526020600020905b815481529060010190602001808311613d4b57829003601f168201915b50505050509150808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613e045780601f10613dd957610100808354040283529160200191613e04565b820191906000526020600020905b815481529060010190602001808311613de757829003601f168201915b50505050509050925092509250909192565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663227028c46040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160e060405180830381600087803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b505050506040513d60e0811015613f0c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975097509750975097509750975050919395979092949650565b6000613f7d61328a565b1515613ff1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156140ab576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b6140b581836189e6565b6140c0600c836185ee565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560058290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060066001908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff160217905550507e604885216c786784445b052e44cfb10d52cb30af08d6b06cc81e93a206f81182604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600080600460008a60ff1660ff168152602001908152602001600020541415151561427a57600080fd5b61429c600460008a60ff1660ff16815260200190815260200160002054613e3c565b9650965096509650965096509650919395979092949650565b60606142c1600c616e3c565b905090565b6142ce61328a565b1515614342576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60026000600460008360ff1660ff168152602001908152602001600020541415151561436d57600080fd5b61438f600460008360ff1660ff1681526020019081526020016000205461757c565b151561439a57600080fd5b6143a261970e565b604051809103906000f0801580156143be573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea3c170c6009600a600760009054906101000a900461ffff166040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818154815260200191508054801561450a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116144c0575b5050838103825285818154815260200191508054801561457157602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116145385790505b505095505050505050602060405180830381600087803b15801561459457600080fd5b505af11580156145a8573d6000803e3d6000fd5b505050506040513d60208110156145be57600080fd5b810190808051906020019092919050505050600960059080546145e292919061971e565b50600a60069080546145f5929190619770565b507ffd5b17f3a6d69cf18d41496f75eacb466d1ae0644cda935b54513e2711094a3a60405160405180910390a1614644600460008360ff1660ff16815260200190815260200160002054617b30565b151561464f57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b61467761328a565b15156146eb576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6146f481618b9f565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156147bb576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6147c58282617784565b5050565b6147d161328a565b1515614845576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000600460008360ff1660ff168152602001908152602001600020541415151561487057600080fd5b614892600460008360ff1660ff1681526020019081526020016000205461757c565b151561489d57600080fd5b614963601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156149595780601f1061492e57610100808354040283529160200191614959565b820191906000526020600020905b81548152906001019060200180831161493c57829003601f168201915b5050505050618c52565b614985600460008360ff1660ff1681526020019081526020016000","2054617b30565b151561499057600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6149b861328a565b1515614a2c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000600460008360ff1660ff1681526020019081526020016000205414151515614a5757600080fd5b614a79600460008360ff1660ff1681526020019081526020016000205461757c565b1515614a8457600080fd5b614b3760148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614b1d5780601f10614af257610100808354040283529160200191614b1d565b820191906000526020600020905b815481529060010190602001808311614b0057829003601f168201915b5050505050601560009054906101000a900460ff1661908d565b614b59600460008360ff1660ff16815260200190815260200160002054617b30565b1515614b6457600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b614b8c61328a565b1515614c00576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000806000600460008560ff1660ff16815260200190815260200160002054141515614c96576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b614ca08333616bf9565b91509150600081111515614d1c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460189080519060200190614d91929190619628565b508360199080519060200190614da8929190619628565b507f3f766563b6dc8bae4c596a8e611d57561d743a148de0a7376c402ef2a37b73d6868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015614e43578082015181840152602081019050614e28565b50505050905090810190601f168015614e705780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015614ea9578082015181840152602081019050614e8e565b50505050905090810190601f168015614ed65780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b614ef661328a565b1515614f6a576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60026000806000600460008560ff1660ff16815260200190815260200160002054141515615000576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b61500a8333616bf9565b91509150600081111515615086576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084600990805190602001906150ba9291906197d0565b5083600a90805190602001906150d192919061985a565b507f6e784e752e2413c08ef00aa2265290040ffd831e18cd6b4c49ef4247e0af89498585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561513c578082015181840152602081019050615121565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561517e578082015181840152602081019050615163565b5050505090500194505050505060405180910390a15050505050565b60008060006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663bbbea4c36040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561523857600080fd5b505af115801561524c573d6000803e3d6000fd5b505050506040513d604081101561526257600080fd5b8101908080519060200190929190805190602001909291905050509250925050915091565b61528f61328a565b1515615303576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000806000600460008560ff1660ff16815260200190815260200160002054141515615399576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6153a38333616bf9565b9150915060008111151561541f576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360169080519060200190615494929190619628565b507fb66262d3b338de61433948970ab20e4f6fa54b2fc5ff2ab8adf88ab579fea9aa8585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561552a57808201518184015260208101905061550f565b50505050905090810190601f1680156155575780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b61557461328a565b15156155e8576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000600460008360ff1660ff168152602001908152602001600020541415151561561357600080fd5b615635600460008360ff1660ff1681526020019081526020016000205461757c565b151561564057600080fd5b6157a1601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660188054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156156fc5780601f106156d1576101008083540402835291602001916156fc565b820191906000526020600020905b8154815290600101906020018083116156df57829003601f168201915b505050505060198054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156157975780601f1061576c57610100808354040283529160200191615797565b820191906000526020600020905b81548152906001019060200180831161577a57829003601f168201915b5050505050616f27565b6157c3600460008360ff1660ff16815260200190815260200160002054617b30565b15156157ce57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60006157f861328a565b151561586c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156158bd57600080fd5b6158c681617da3565b507f378d4ef21f8a8f2517b55ef93716b197a08b5e23deb58d7c4c43818323c56a2482604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000606061593a61328a565b15156159ae576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f","7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615a685780601f10615a3d57610100808354040283529160200191615a68565b820191906000526020600020905b815481529060010190602001808311615a4b57829003601f168201915b50505050509050915091509091565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c77695e4846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015615b3657600080fd5b505af1158015615b4a573d6000803e3d6000fd5b505050506040513d6040811015615b6057600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b6000601354905090565b600080600080600080600080600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515615c54576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b615c5d81613e3c565b975097509750975097509750975050919395979092949650565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b615cd661328a565b1515615d4a576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000806000600460008560ff1660ff16815260200190815260200160002054141515615de0576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b615dea8333616bf9565b91509150600081111515615e66576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555083600760026101000a81548161ffff021916908361ffff1602179055507fed9af10492e3f51ac2f1b8d17556b72a9f1f8c29f3cf5092d63fe73653042dbd84604051808261ffff1661ffff16815260200191505060405180910390a150505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515615faa576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b615fb48282618c52565b5050565b615fc061328a565b1515616034576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000806000600460008560ff1660ff168152602001908152602001600020541415156160ca576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6160d48333616bf9565b91509150600081111515616150576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff168152602001908152602001600020819055508460149080519060200190616184929190619628565b5083601560006101000a81548160ff021916908360ff1602179055507f789666af46fc8796a38302a54d8b49e28123c2e56f22bcc51a14db5f56c938e1858560405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b8381101561620f5780820151818401526020810190506161f4565b50505050905090810190601f16801561623c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b61625961328a565b15156162cd576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000806000600460008560ff1660ff16815260200190815260200160002054141515616363576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b61636d8333616bf9565b915091506000811115156163e9576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601d908051906020019061645e929190619628565b5083601e9080519060200190616475929190619628565b507fe6567e4e72e657550236fef054e1618c43af6e0d4922dc41139d58bc35e84189868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156165105780820151818401526020810190506164f5565b50505050905090810190601f16801561653d5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561657657808201518184015260208101905061655b565b50505050905090810190601f1680156165a35780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6165c361328a565b1515616637576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000600460008360ff1660ff168152602001908152602001600020541415151561666257600080fd5b616684600460008360ff1660ff1681526020019081526020016000205461757c565b151561668f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca4eadb7600760029054906101000a900461ffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808261ffff1661ffff168152602001915050602060405180830381600087803b15801561673857600080fd5b505af115801561674c573d6000803e3d6000fd5b505050506040513d602081101561676257600080fd5b810190808051906020019092919050505050600760029054906101000a900461ffff16600760006101000a81548161ffff021916908361ffff1602179055507f6d2d8bb18d1b2d1d8afaad90aa25682849ce52cb40abce1ea93a717b20c7189460405160405180910390a16167ef600460008360ff1660ff16815260200190815260200160002054617b30565b15156167fa57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156168de576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6168e8828261908d565b5050565b60006011846040518082805190602001908083835b6020831015156169265780518252602082019150602081019050602083039250616901565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff","ffffffffffffffffffffffff1681526020019081526020016000206000836040518082805190602001908083835b6020831015156169d157805182526020820191506020810190506020830392506169ac565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690509392505050565b6000616a6b61328a565b1515616adf576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515616b3057600080fd5b616b3981617b30565b1515616b4457600080fd5b616b4f600f836185ee565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557fa2b82124db502ae22cbe3485f3e7586a86eedf8e44f988169c82f46fd6ce0fea82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600080600160008154809291906001019190505550616c1b600154858561930c565b600154915091509250929050565b60008173ffffffffffffffffffffffffffffffffffffffff1614151515616cde576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4c6962416464726573735365743a2076616c75652063616e277420626520307881526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b616ce882826195d9565b151515616d83576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4c6962416464726573735365743a2076616c756520616c72656164792065786981526020017f73747320696e20746865207365742e000000000000000000000000000000000081525060400191505060405180910390fd5b816001018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600101805490508260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60608060008360010180549050604051908082528060200260200182016040528015616e775781602001602082028038833980820191505090505b5091505b8360010180549050811015616f1d578360010181815481101515616e9b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181101515616ed457fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050616e7b565b8192505050919050565b60008060606011846040518082805190602001908083835b602083101515616f645780518252602082019150602081019050602083039250616f3f565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff1614151515617026576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b846040518082805190602001908083835b60208310151561705c5780518252602082019150602081019050602083039250617037565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615151561719e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f66756e6374696f6e20616c72656164792061646400000000000000000000000081525060200191505060405180910390fd5b601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156172c05780601f10617295576101008083540402835291602001916172c0565b820191906000526020600020905b8154815290600101906020018083116172a357829003601f168201915b50505050509050600081511415156172d757600080fd5b60018360040160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550826002016000815480929190600101919050555083601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000209080519060200190617436929190619628565b507f72920f24307e6952804d77a359a449e836816f46735327c47c6a76bec5caffcc868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156174d15780820151818401526020810190506174b6565b50505050905090810190601f1680156174fe5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561753757808201518184015260208101905061751c565b50505050905090810190601f1680156175645780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6000806000806003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156175db576000925061777d565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663e8ffc242856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561768057600080fd5b505af1158015617694573d6000803e3d6000fd5b505050506040513d60208110156176aa57600080fd5b81019080805190602001909291905050509050600115158115151415617779576003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16847f44e441ea025d9c27af4a8a390a4f8cc60b91f2be08659049e54ab904e342f18c30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35b8092505b5050919050565b60006011826040518082805190602001908083835b6020831015156177be5780518252602082019150602081019050602083039250617799565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156178b3576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b60006011836040518082805190602001908083835b6020831015156178ed57805182526020820191506020810190506020830392506178c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060118260405180","82805190602001908083835b6020831015156179af578051825260208201915060208101905060208303925061798a565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016000815480929190600190039190505550816040518082805190602001908083835b602083101515617a2c5780518252602082019150602081019050602083039250617a07565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090507fb88fd5b1e0a2f3570ca558ddc95e563eba1eb33f215410ac82b4762405b7a08a8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015617af0578082015181840152602081019050617ad5565b50505050905090810190601f168015617b1d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b60008060006001915060006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415617b945760009150617ca9565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e3ccca1560026040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260ff168152602001915050600060405180830381600087803b158015617c3d57600080fd5b505af1158015617c51573d6000803e3d6000fd5b5050505060006003600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b811515847f55f34a650247f5482c8d8913747ecdb1d36553fe9b42c414b96cad93d675c51b30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38192505050919050565b6000600460008360ff1660ff1681526020019081526020016000205414151515617d4357600080fd5b617d65600460008360ff1660ff16815260200190815260200160002054617da3565b1515617d7057600080fd5b8060ff167fe1850379bf4e321a0591a004c069902632706c2d21d1503ecd8aa0354ac87ad360405160405180910390a250565b600080600080600080600080339650600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c77695e4886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015617e6e57600080fd5b505af1158015617e82573d6000803e3d6000fd5b505050506040513d6040811015617e9857600080fd5b81019080805190602001909291908051906020019092919050505095509550600193506000925060008661ffff161415617ed5576000935061802f565b600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915060008273ffffffffffffffffffffffffffffffffffffffff161415617f33576000935061802e565b8190508073ffffffffffffffffffffffffffffffffffffffff1663f61eb27e88886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001925050506040805180830381600087803b158015617fe057600080fd5b505af1158015617ff4573d6000803e3d6000fd5b505050506040513d604081101561800a57600080fd5b81019080805190602001909291908051906020019092919050505080945081955050505b5b8673ffffffffffffffffffffffffffffffffffffffff16897fde70b399d7539bc3e7042671a3f047a2c6a8443ef9a2e914de5e1eddbc247e4e863060405180831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a383975050505050505050919050565b6000806011836040518082805190602001908083835b60208310151561810057805182526020820191506020810190506020830392506180db565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020915060008260000160009054906101000a900460ff1660ff16141515156181c2576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b836040518082805190602001908083835b6020831015156181f857805182526020820191506020810190506020830392506181d3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508160040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff161515618339576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f66756e6374696f6e206e6f74206578697374000000000000000000000000000081525060200191505060405180910390fd5b60008260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055508160020160008154809291906001900391905055506020604051908101604052806000815250601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002090805190602001906184a9929190619628565b507f5f67318a46f19a1582f641fe5bda42c33716f3f06d5960b5e92efc04c2c4cc50858585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015618544578082015181840152602081019050618529565b50505050905090810190601f1680156185715780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156185aa57808201518184015260208101905061858f565b50505050905090810190601f1680156185d75780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15050505050565b60008060006185fd85856195d9565b1515618697576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f4c6962416464726573735365743a2076616c756520646f65736e27742065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60018560000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540392506001856001018054905003915084600101828154811015156186fc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080856001018481548110151561873b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828560000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558460010180548091906001900361882591906196a8565b505050505050565b816188378161757c565b15156188d1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdc10eed8360006040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff16815260200192","505050602060405180830381600087803b15801561899b57600080fd5b505af11580156189af573d6000803e3d6000fd5b505050506040513d60208110156189c557600080fd5b8101908080519060200190929190505050506189e081617b30565b50505050565b816189f08161757c565b1515618a8a576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdc10eed8360016040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff16815260200192505050602060405180830381600087803b158015618b5457600080fd5b505af1158015618b68573d6000803e3d6000fd5b505050506040513d6020811015618b7e57600080fd5b810190808051906020019092919050505050618b9981617b30565b50505050565b6000600460008360ff1660ff1681526020019081526020016000205414151515618bc857600080fd5b618bea600460008360ff1660ff16815260200190815260200160002054617b30565b1515618bf557600080fd5b600460008260ff1660ff168152602001908152602001600020600090557fdcbb8f5f566f47c944e930a9ae552f8f8c6f71d65c8e0ca63e5d4650bd16aef081604051808260ff1660ff16815260200191505060405180910390a150565b60006011826040518082805190602001908083835b602083101515618c8c5780518252602082019150602081019050602083039250618c67565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff1614151515618d49576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b6011816040518082805190602001908083835b602083101515618d815780518252602082019150602081019050602083039250618d5c565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515618e77576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e7420616c7265616479206164640000000000000000000000000081525060200191505060405180910390fd5b60016011826040518082805190602001908083835b602083101515618eb15780518252602082019150602081019050602083039250618e8c565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011816040518082805190602001908083835b602083101515618f735780518252602082019150602081019050602083039250618f4e565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101600081548092919060010191905055507ff674025878f9905dcf119f8ce7eea809dba2e4aa908dba6b5698785182b0ad688282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561904e578082015181840152602081019050619033565b50505050905090810190601f16801561907b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b606082905060008151141515156190a357600080fd5b60006011846040518082805190602001908083835b6020831015156190dd57805182526020820191506020810190506020830392506190b8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff16141515619199576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f67726f757020616c72656164792065786973740000000000000000000000000081525060200191505060405180910390fd5b6060604051908101604052808360ff1681526020016000815260200160008152506011846040518082805190602001908083835b6020831015156191f257805182526020820191506020810190506020830392506191cd565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160010155604082015181600201559050507fcf95dc959312b4904f4de862aad04f847527c51e5b446799603101f19526567f838360405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b838110156192cc5780820151818401526020810190506192b1565b50505050905090810190601f1680156192f95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b60008060008060006003600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156193a3576003600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508293506195cf565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f2160976040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561942957600080fd5b505af115801561943d573d6000803e3d6000fd5b505050506040513d602081101561945357600080fd5b8101908080519060200190929190505050915086868684619472619904565b808581526020018460ff1660ff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001945050505050604051809103906000f0801580156194e7573d6000803e3d6000fd5b509050806003600089815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff168660ff16887fe26ea3d3c9637079e1652fb43c524b8420a3a0987e6eecf5607e4b8df20036a98530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a48093505b5050509392505050565b6000808360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061966957805160ff1916838001178555619697565b82800160010185558215619697579182015b8281111561969657825182559160200191906001019061967b565b5b5090506196a49190619914565b5090565b8154818355818111156196cf578183600052602060002091820191016196ce9190619914565b5b505050565b81548183558181111561970957600f016010900481600f016010900483600052602060002091820191016197089190619914565b5b505050565b60405161143080619c7883390190565b82805482825590600052602060002090810192821561975f5760005260206000209182015b8281111561975e578254825591600101919060010190619743565b5b50905061976c9190619939565b5090565b82805482825590600052602060002090600f016010900481019282156197bf57600052602060002091600f016010900482015b828111156197be5782548255916001019190600101906197a3565b5b5090506197cc919061997c565b5090565b828054828255906000526020600020908101928215619849579160200282015b828111156198485782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906197f0565b5b5090506198569190619939565b5090565b82805482825590600052602060002090600f016010900481019282156198f35791602002820160005b838211156198c357835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302619883565b80156198f15782816101000a81549061ffff02191690556002016020816001010492830192600103026198c3565b505b509050619900919061997c565b5090565b604051610d7a8061b0a883390190565b61993691905b8082111561993257600081600090555060010161991a565b5090565b90565b61997991905b8082111561997557600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161993f565b5090565b90565b6199","aa91905b808211156199a657600081816101000a81549061ffff021916905550600101619982565b5090565b90565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea3c170c8484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619ab0578082015181840152602081019050619a95565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619af2578082015181840152602081019050619ad7565b5050505090500195505050505050602060405180830381600087803b158015619b1a57600080fd5b505af1158015619b2e573d6000803e3d6000fd5b505050506040513d6020811015619b4457600080fd5b8101908080519060200190929190505050508260059080519060200190619b6c9291906197d0565b508160069080519060200190619b8392919061985a565b5080600760006101000a81548161ffff021916908361ffff1602179055507fab88aac081194e202f78b52f9630ee711ed21111fd9c301de2d051725ae4cbab8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619c1a578082015181840152602081019050619bff565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619c5c578082015181840152602081019050619c41565b505050509050019550505050505060405180910390a150505056006080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305282c701461009e57806328e91489146100e157806387a2fee4146101385780638f216097146101fb578063c77695e41461022e578063ca4eadb71461029c578063ea3c170c146102e5578063f910baf9146103b4578063fdc10eed1461044e575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b506100f6610676565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014457600080fd5b5061014d61069b565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156101a2578082015181840152602081019050610187565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156101e45780820151818401526020810190506101c9565b505050509050019550505050505060405180910390f35b34801561020757600080fd5b506102106106d1565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561023a57600080fd5b5061026f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e5565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b3480156102a857600080fd5b506102cb600480360381019080803561ffff169060200190929190505050610716565b604051808215151515815260200191505060405180910390f35b3480156102f157600080fd5b5061039a6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610828565b604051808215151515815260200191505060405180910390f35b3480156103c057600080fd5b5061043460048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff169060200190929190505050610b6e565b604051808215151515815260200191505060405180910390f35b34801561045a57600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610e62565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a450565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806060806106ad6001610ff8565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b600460009054906101000a900461ffff1681565b6000806106fc83600161110e90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610802576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610915576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610927575083518551145b151561099b576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610b6257600084828151811015156109d657fe5b9060200190602002015161ffff16111515610a59576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b610a9d8582815181101515610a6a57fe5b906020019060200201518583815181101515610a8257fe5b90602001906020020151600161119c9092919063ffffffff16565b8481815181101515610aab57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928583815181101515610afa57fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a280806001019150506109bd565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c5b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000","000000000000000081525060400191505060405180910390fd5b60008551111515610cd4576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610d50576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610e5657610da88582815181101515610d8c57fe5b9060200190602002015185600161119c9092919063ffffffff16565b8481815181101515610db657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610d72565b60019150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f648383600161119c9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60608082600101836002018180548060200260200160405190810160405280929190818152602001828054801561108457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161103a575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156110fe57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116110c55790505b5050505050905091509150915091565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150846002016001830381548110151561116b57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114156112f457836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611339565b81846002016001830381548110151561130957fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b505050505600a165627a7a723058201c0db903fb0c31ec4c6e6d6e915ba42d09fa12e1516fda0fc07175afd3293b400029608060405234801561001057600080fd5b50604051608080610d7a83398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a48360018190555080600260006101000a81548161ffff021916908361ffff1602179055506000600460006101000a81548161ffff021916908361ffff1602179055506000600460026101000a81548160ff021916908360ff16021790555082600460036101000a81548160ff021916908360ff160217905550816004806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050610bab806101cf6000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305282c701461009e578063227028c4146100e157806325780318146101aa57806328e91489146102055780632dbf64011461025c578063bbbea4c3146102b3578063e3ccca1514610317578063e8ffc24214610347578063f61eb27e1461038c575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610404565b005b3480156100ed57600080fd5b506100f66105c3565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b3480156101b657600080fd5b506101eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610650565b604051808215151515815260200191505060405180910390f35b34801561021157600080fd5b5061021a6106a6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561026857600080fd5b506102716106cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102bf57600080fd5b506102c86106f0565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561032357600080fd5b50610345600480360381019080803560ff16906020019092919050505061072d565b005b34801561035357600080fd5b506103726004803603810190808035906020019092919050505061087c565b604051808215151515815260200191505060405180910390f35b34801561039857600080fd5b506103db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291905050506108b1565b60405180831515151581526020018261ffff1661ffff1681526020019250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156104ee576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a450565b60008060008060008060006001546004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900461ffff1630600460009054906101000a900461ffff16600460039054906101000a900460ff16600460029054906101000a900460ff16839350965096509650965096509650965090919293949596565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600460039054906101000a900460ff1660048090","54906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610817576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168160ff167fbe01663bd17454b73ac522a855cfc1eb2c887f130e9100c94c0dcc3a5704801b60405160405180910390a380600460026101000a81548160ff021916908360ff16021790555050565b6000600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff1610159050919050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109a0576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600015158115151415610a885783600460009054906101000a900461ffff1601600460006101000a81548161ffff021916908361ffff1602179055506001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610aa4565b6000600460009054906101000a900461ffff1692509250610b77565b8361ffff168573ffffffffffffffffffffffffffffffffffffffff167f7a2721a057622ab3b8b854b33d269dd5f47f7ebae67f5b4e5f94d32c3f2cf03b30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff16101515610b5f57610b5e600161072d565b5b6001600460009054906101000a900461ffff16925092505b5092509290505600a165627a7a7230582087e312fad560838acd219c074eaf631dca461e1478c5f77179e5ca8f75356add0029a165627a7a723058204bf36e5d21f32d6e85e36848876c9f4b302e0db7a45f3e77b1c99edccafd446400296080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305282c701461009e57806328e91489146100e157806387a2fee4146101385780638f216097146101fb578063c77695e41461022e578063ca4eadb71461029c578063ea3c170c146102e5578063f910baf9146103b4578063fdc10eed1461044e575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b506100f6610676565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014457600080fd5b5061014d61069b565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156101a2578082015181840152602081019050610187565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156101e45780820151818401526020810190506101c9565b505050509050019550505050505060405180910390f35b34801561020757600080fd5b506102106106d1565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561023a57600080fd5b5061026f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e5565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b3480156102a857600080fd5b506102cb600480360381019080803561ffff169060200190929190505050610716565b604051808215151515815260200191505060405180910390f35b3480156102f157600080fd5b5061039a6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610828565b604051808215151515815260200191505060405180910390f35b3480156103c057600080fd5b5061043460048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff169060200190929190505050610b6e565b604051808215151515815260200191505060405180910390f35b34801561045a57600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610e62565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a450565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806060806106ad6001610ff8565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b600460009054906101000a900461ffff1681565b6000806106fc83600161110e90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610802576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610915576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610927575083518551145b151561099b576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610b6257600084828151811015156109d657fe5b9060200190602002015161ffff16111515610a59576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b610a9d8582815181101515610a6a57fe5b9060","20019060200201518583815181101515610a8257fe5b90602001906020020151600161119c9092919063ffffffff16565b8481815181101515610aab57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928583815181101515610afa57fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a280806001019150506109bd565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c5b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551111515610cd4576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610d50576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610e5657610da88582815181101515610d8c57fe5b9060200190602002015185600161119c9092919063ffffffff16565b8481815181101515610db657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610d72565b60019150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f648383600161119c9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60608082600101836002018180548060200260200160405190810160405280929190818152602001828054801561108457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161103a575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156110fe57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116110c55790505b5050505050905091509150915091565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150846002016001830381548110151561116b57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114156112f457836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611339565b81846002016001830381548110151561130957fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b505050505600a165627a7a723058201c0db903fb0c31ec4c6e6d6e915ba42d09fa12e1516fda0fc07175afd3293b400029"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    protected static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"approveRemoveGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"requestAddGovernor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRequestInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeRemoveFunctionFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewRemoveFunctionToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGovs\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"},{\"name\":\"\",\"type\":\"uint16[]\"},{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewAddFunctionToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"approveAddGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"executeRemoveGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"}],\"name\":\"containsFunction\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_voteWeight\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"removeFunctionFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"deleteSingle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"deleteAddGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestRemoveFunctionFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewCreateGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGovernorsToRemove\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestRemoveAccountFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewAddAccountToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeRemoveAccountFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"inGovs\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestAddAccountToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getRemoveGovRequest\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeSetThreshold\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"opMode\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeCreateGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeResetGovernAccounts\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewRemoveAccountToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"approveSingle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"containsAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"executeAddGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"getGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"who\",\"type\":\"address\"}],\"name\":\"getWeight\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeAddAccountToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"sig\",\"type\":\"bytes4\"},{\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"canCallFunction\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"removeAccountFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newAdminAddr\",\"type\":\"address\"}],\"name\":\"transferAdminAuth\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"addFunctionToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRequestTxType\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"createGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"functio","n\"},{\"constant\":false,\"inputs\":[{\"name\":\"governors\",\"type\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint16[]\"}],\"name\":\"requestResetGovernors\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"deleteRemoveGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeAddFunctionToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getVoteWeight\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"getRequestSingle\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAddGovRequest\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestAddFunctionToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"addAccountToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"requestRemoveGovernor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGovernorsToAdd\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"requestCreateGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newThreshold\",\"type\":\"uint16\"}],\"name\":\"requestSetThreshold\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"mode\",\"type\":\"uint256\"},{\"name\":\"accounts\",\"type\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint16[]\"},{\"name\":\"threshold\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"RequestCreateGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestAddAccountToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestAddFunctionToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestRemoveAccountFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestRemoveFunctionFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"CreateGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"AddAccountToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"AddFunctionToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RemoveAccountFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RemoveFunctionFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"accounts\",\"type\":\"address[]\"},{\"indexed\":false,\"name\":\"weights\",\"type\":\"uint16[]\"},{\"indexed\":false,\"name\":\"threshold\",\"type\":\"uint16\"}],\"name\":\"InitWeightData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"threshold\",\"type\":\"uint16\"}],\"name\":\"RequestSetThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ExecuteSetThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"governors\",\"type\":\"address[]\"},{\"indexed\":false,\"name\":\"weights\",\"type\":\"uint16[]\"}],\"name\":\"RequestResetGovernors\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ExecuteResetGovernAccounts\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"reqId\",\"type\":\"uint256\"}],\"name\":\"RequestAddGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DeleteAddGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ApproveAddGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ExecuteAddGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"RequestRemoveGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DeleteRemoveGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ApproveRemoveGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ExecuteRemoveGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"ApproveSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"DeleteSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"voteWeight\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogSetVoteWeight\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"txType\",\"type\":\"uint8\"},{\"indexed\":true,\"name\":\"requestAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"threshold\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogRegister\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogUnregister\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"b\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogApprove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"b\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogUnapprove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"requestAddress","\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogCanCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"TransferAdminAuth\",\"type\":\"event\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final String FUNC_APPROVEREMOVEGOVERNORREQ = "approveRemoveGovernorReq";

    public static final String FUNC_REQUESTADDGOVERNOR = "requestAddGovernor";

    public static final String FUNC_GETREQUESTINFO = "getRequestInfo";

    public static final String FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP = "executeRemoveFunctionFromGroup";

    public static final String FUNC_VIEWREMOVEFUNCTIONTOGROUP = "viewRemoveFunctionToGroup";

    public static final String FUNC_GETGOVS = "getGovs";

    public static final String FUNC_VIEWADDFUNCTIONTOGROUP = "viewAddFunctionToGroup";

    public static final String FUNC_APPROVEADDGOVERNORREQ = "approveAddGovernorReq";

    public static final String FUNC_EXECUTEREMOVEGOVERNORREQ = "executeRemoveGovernorReq";

    public static final String FUNC_CONTAINSFUNCTION = "containsFunction";

    public static final String FUNC__VOTEWEIGHT = "_voteWeight";

    public static final String FUNC_REMOVEFUNCTIONFROMGROUP = "removeFunctionFromGroup";

    public static final String FUNC_DELETESINGLE = "deleteSingle";

    public static final String FUNC_DELETEADDGOVERNORREQ = "deleteAddGovernorReq";

    public static final String FUNC_REQUESTREMOVEFUNCTIONFROMGROUP = "requestRemoveFunctionFromGroup";

    public static final String FUNC_VIEWCREATEGROUP = "viewCreateGroup";

    public static final String FUNC_GETGOVERNORSTOREMOVE = "getGovernorsToRemove";

    public static final String FUNC_REQUESTREMOVEACCOUNTFROMGROUP = "requestRemoveAccountFromGroup";

    public static final String FUNC_VIEWADDACCOUNTTOGROUP = "viewAddAccountToGroup";

    public static final String FUNC_EXECUTEREMOVEACCOUNTFROMGROUP = "executeRemoveAccountFromGroup";

    public static final String FUNC_GETADMIN = "getAdmin";

    public static final String FUNC_INGOVS = "inGovs";

    public static final String FUNC_REQUESTADDACCOUNTTOGROUP = "requestAddAccountToGroup";

    public static final String FUNC_GETREMOVEGOVREQUEST = "getRemoveGovRequest";

    public static final String FUNC_EXECUTESETTHRESHOLD = "executeSetThreshold";

    public static final String FUNC_OPMODE = "opMode";

    public static final String FUNC_EXECUTECREATEGROUP = "executeCreateGroup";

    public static final String FUNC_EXECUTERESETGOVERNACCOUNTS = "executeResetGovernAccounts";

    public static final String FUNC_VIEWREMOVEACCOUNTTOGROUP = "viewRemoveAccountToGroup";

    public static final String FUNC_APPROVESINGLE = "approveSingle";

    public static final String FUNC_CONTAINSACCOUNT = "containsAccount";

    public static final String FUNC_EXECUTEADDGOVERNORREQ = "executeAddGovernorReq";

    public static final String FUNC_GETGROUP = "getGroup";

    public static final String FUNC_GETWEIGHT = "getWeight";

    public static final String FUNC_EXECUTEADDACCOUNTTOGROUP = "executeAddAccountToGroup";

    public static final String FUNC_CANCALLFUNCTION = "canCallFunction";

    public static final String FUNC_REMOVEACCOUNTFROMGROUP = "removeAccountFromGroup";

    public static final String FUNC_TRANSFERADMINAUTH = "transferAdminAuth";

    public static final String FUNC_ISADMIN = "isAdmin";

    public static final String FUNC_ADDFUNCTIONTOGROUP = "addFunctionToGroup";

    public static final String FUNC_GETREQUESTTXTYPE = "getRequestTxType";

    public static final String FUNC_CREATEGROUP = "createGroup";

    public static final String FUNC_REQUESTRESETGOVERNORS = "requestResetGovernors";

    public static final String FUNC_DELETEREMOVEGOVERNORREQ = "deleteRemoveGovernorReq";

    public static final String FUNC_EXECUTEADDFUNCTIONTOGROUP = "executeAddFunctionToGroup";

    public static final String FUNC_GETVOTEWEIGHT = "getVoteWeight";

    public static final String FUNC_GETREQUESTSINGLE = "getRequestSingle";

    public static final String FUNC_GETADDGOVREQUEST = "getAddGovRequest";

    public static final String FUNC_REQUESTADDFUNCTIONTOGROUP = "requestAddFunctionToGroup";

    public static final String FUNC_ADDACCOUNTTOGROUP = "addAccountToGroup";

    public static final String FUNC_REQUESTREMOVEGOVERNOR = "requestRemoveGovernor";

    public static final String FUNC_GETGOVERNORSTOADD = "getGovernorsToAdd";

    public static final String FUNC_REQUESTCREATEGROUP = "requestCreateGroup";

    public static final String FUNC_REQUESTSETTHRESHOLD = "requestSetThreshold";

    public static final Event REQUESTCREATEGROUP_EVENT = new Event("RequestCreateGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
    ;

    public static final Event REQUESTADDACCOUNTTOGROUP_EVENT = new Event("RequestAddAccountToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REQUESTADDFUNCTIONTOGROUP_EVENT = new Event("RequestAddFunctionToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REQUESTREMOVEACCOUNTFROMGROUP_EVENT = new Event("RequestRemoveAccountFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REQUESTREMOVEFUNCTIONFROMGROUP_EVENT = new Event("RequestRemoveFunctionFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event CREATEGROUP_EVENT = new Event("CreateGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
    ;

    public static final Event ADDACCOUNTTOGROUP_EVENT = new Event("AddAccountToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event ADDFUNCTIONTOGROUP_EVENT = new Event("AddFunctionToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REMOVEACCOUNTFROMGROUP_EVENT = new Event("RemoveAccountFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REMOVEFUNCTIONFROMGROUP_EVENT = new Event("RemoveFunctionFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event INITWEIGHTDATA_EVENT = new Event("InitWeightData", 
            Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}, new TypeReference<Uint16>() {}));
    ;

    public static final Event REQUESTSETTHRESHOLD_EVENT = new Event("RequestSetThreshold", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint16>() {}));
    ;

    public static final Event EXECUTESETTHRESHOLD_EVENT = new Event("ExecuteSetThreshold", 
            Arrays.<TypeReference<?>>asList());
    ;

    public static final Event REQUESTRESETGOVERNORS_EVENT = new Event("RequestResetGovernors", 
            Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}));
    ;

    public static final Event EXECUTERESETGOVERNACCOUNTS_EVENT = new Event("ExecuteResetGovernAccounts", 
            Arrays.<TypeReference<?>>asList());
    ;

    public static final Event REQUESTADDGOVERNOR_EVENT = new Event("RequestAddGovernor", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event DELETEADDGOVERNORREQ_EVENT = new Event("DeleteAddGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event APPROVEADDGOVERNORREQ_EVENT = new Event("ApproveAddGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event EXECUTEADDGOVERNORREQ_EVENT = new Event("ExecuteAddGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event REQUESTREMOVEGOVERNOR_EVENT = new Event("RequestRemoveGovernor", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event DELETEREMOVEGOVERNORREQ_EVENT = new Event("DeleteRemoveGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event APPROVEREMOVEGOVERNORREQ_EVENT = new Event("ApproveRemoveGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event EXECUTEREMOVEGOVERNORREQ_EVENT = new Event("ExecuteRemoveGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event APPROVESINGLE_EVENT = new Event("ApproveSingle", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>(true) {}));
    ;

    public static final Event DELETESINGLE_EVENT = new Event("DeleteSingle", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
    ;

    public static final Event LOGSETVOTEWEIGHT_EVENT = new Event("LogSetVoteWeight", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGREGISTER_EVENT = new Event("LogRegister", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Uint8>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGUNREGISTER_EVENT = new Event("LogUnregister", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Bool>(true) {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGAPPROVE_EVENT = new Event("LogApprove", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Bool>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGUNAPPROVE_EVENT = new Event("LogUnapprove", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Bool>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGCANCALL_EVENT = new Event("LogCanCall", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Address>() {}));
    ;

    public static final Event TRANSFERADMINAUTH_EVENT = new Event("TransferAdminAuth", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
    ;

    protected AuthManager(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public TransactionReceipt approveRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void approveRemoveGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getApproveRemoveGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt requestAddGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestAddGovernor(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestAddGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRequestAddGovernorInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getRequestInfo(BigInteger id) throws ContractException {
        final Function function = new Function(FUNC_GETREQUESTINFO, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(id)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public TransactionReceipt executeRemoveFunctionFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeRemoveFunctionFromGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteRemoveFunctionFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> viewRemoveFunctionToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWREMOVEFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<String, String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue());
    }

    public Tuple3<List<String>, List<BigInteger>, BigInteger> getGovs() throws ContractException {
        final Function function = new Function(FUNC_GETGOVS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}, new TypeReference<Uint16>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<List<String>, List<BigInteger>, BigInteger>(
                convertToNative((List<Address>) results.get(0).getValue()), 
                convertToNative((List<Uint16>) results.get(1).getValue()), 
                (BigInteger) results.get(2).getValue());
    }

    public Tuple3<String, String, String> viewAddFunctionToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<String, String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue());
    }

    public TransactionReceipt approveAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void approveAddGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getApproveAddGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt executeRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeRemoveGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getExecuteRemoveGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Boolean containsFunction(String group, String contractAddr, String func) throws ContractException {
        final Function function = new Function(FUNC_CONTAINSFUNCTION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public String _voteWeight() throws ContractException {
        final Function function = new Function(FUNC__VOTEWEIGHT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt removeFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void removeFunctionFromGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemoveFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getRemoveFunctionFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public TransactionReceipt deleteSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_DELETESINGLE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(txType)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deleteSingle(BigInteger txType, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DELETESINGLE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(txType)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeleteSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_DELETESINGLE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(txType)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getDeleteSingleInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETESINGLE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt deleteAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deleteAddGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeleteAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getDeleteAddGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt requestRemoveFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestRemoveFunctionFromGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestRemoveFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getRequestRemoveFunctionFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public Tuple2<String, BigInteger> viewCreateGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWCREATEGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, BigInteger>(
                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue());
    }

    public List getGovernorsToRemove() throws ContractException {
        final Function function = new Function(FUNC_GETGOVERNORSTOREMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt requestRemoveAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestRemoveAccountFromGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestRemoveAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getRequestRemoveAccountFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public Tuple2<String, String> viewAddAccountToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt executeRemoveAccountFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeRemoveAccountFromGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteRemoveAccountFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public String getAdmin() throws ContractException {
        final Function function = new Function(FUNC_GETADMIN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Boolean inGovs() throws ContractException {
        final Function function = new Function(FUNC_INGOVS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt requestAddAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestAddAccountToGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestAddAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getRequestAddAccountToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getRemoveGovRequest(String account) throws ContractException {
        final Function function = new Function(FUNC_GETREMOVEGOVREQUEST, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public TransactionReceipt executeSetThreshold() {
        final Function function = new Function(
                FUNC_EXECUTESETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeSetThreshold(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTESETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteSetThreshold() {
        final Function function = new Function(
                FUNC_EXECUTESETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public BigInteger opMode() throws ContractException {
        final Function function = new Function(FUNC_OPMODE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt executeCreateGroup() {
        final Function function = new Function(
                FUNC_EXECUTECREATEGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeCreateGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTECREATEGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteCreateGroup() {
        final Function function = new Function(
                FUNC_EXECUTECREATEGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public TransactionReceipt executeResetGovernAccounts() {
        final Function function = new Function(
                FUNC_EXECUTERESETGOVERNACCOUNTS, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeResetGovernAccounts(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTERESETGOVERNACCOUNTS, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteResetGovernAccounts() {
        final Function function = new Function(
                FUNC_EXECUTERESETGOVERNACCOUNTS, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> viewRemoveAccountToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWREMOVEACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt approveSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(txType)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void approveSingle(BigInteger txType, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(txType)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(txType)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getApproveSingleInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public Boolean containsAccount(String group, String account) throws ContractException {
        final Function function = new Function(FUNC_CONTAINSACCOUNT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt executeAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeAddGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getExecuteAddGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Tuple3<BigInteger, BigInteger, BigInteger> getGroup(String group) throws ContractException {
        final Function function = new Function(FUNC_GETGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue());
    }

    public Tuple2<BigInteger, BigInteger> getWeight(String who) throws ContractException {
        final Function function = new Function(FUNC_GETWEIGHT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(who)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint16>() {}, new TypeReference<Uint16>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue());
    }

    public TransactionReceipt executeAddAccountToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeAddAccountToGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteAddAccountToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Boolean canCallFunction(String contractAddr, byte[] sig, String caller) throws ContractException {
        final Function function = new Function(FUNC_CANCALLFUNCTION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Bytes4(sig), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(caller)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt removeAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void removeAccountFromGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemoveAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getRemoveAccountFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public TransactionReceipt transferAdminAuth(String newAdminAddr) {
        final Function function = new Function(
                FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(newAdminAddr)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void transferAdminAuth(String newAdminAddr, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(newAdminAddr)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransferAdminAuth(String newAdminAddr) {
        final Function function = new Function(
                FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(newAdminAddr)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getTransferAdminAuthInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Boolean isAdmin() throws ContractException {
        final Function function = new Function(FUNC_ISADMIN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt addFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void addFunctionToGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getAddFunctionToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public Tuple2<BigInteger, String> getRequestTxType(BigInteger id) throws ContractException {
        final Function function = new Function(FUNC_GETREQUESTTXTYPE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(id)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}, new TypeReference<Address>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, String>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt createGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_CREATEGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(mode)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void createGroup(String group, BigInteger mode, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_CREATEGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(mode)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForCreateGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_CREATEGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(mode)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, BigInteger> getCreateGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_CREATEGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public TransactionReceipt requestResetGovernors(List<String> governors, List<BigInteger> weights) {
        final Function function = new Function(
                FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(governors.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("address[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(governors, org.fisco.bcos.sdk.abi.datatypes.Address.class)), 
                weights.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("uint16[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.generated.Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, org.fisco.bcos.sdk.abi.datatypes.generated.Uint16.class))), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestResetGovernors(List<String> governors, List<BigInteger> weights, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(governors.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("address[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(governors, org.fisco.bcos.sdk.abi.datatypes.Address.class)), 
                weights.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("uint16[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.generated.Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, org.fisco.bcos.sdk.abi.datatypes.generated.Uint16.class))), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestResetGovernors(List<String> governors, List<BigInteger> weights) {
        final Function function = new Function(
                FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(governors.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("address[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(governors, org.fisco.bcos.sdk.abi.datatypes.Address.class)), 
                weights.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("uint16[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.generated.Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, org.fisco.bcos.sdk.abi.datatypes.generated.Uint16.class))), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<List<String>, List<BigInteger>> getRequestResetGovernorsInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<List<String>, List<BigInteger>>(

                convertToNative((List<Address>) results.get(0).getValue()), 
                convertToNative((List<Uint16>) results.get(1).getValue())
                );
    }

    public TransactionReceipt deleteRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deleteRemoveGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeleteRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getDeleteRemoveGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt executeAddFunctionToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeAddFunctionToGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteAddFunctionToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public String getVoteWeight() throws ContractException {
        final Function function = new Function(FUNC_GETVOTEWEIGHT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getRequestSingle(BigInteger txType) throws ContractException {
        final Function function = new Function(FUNC_GETREQUESTSINGLE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(txType)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getAddGovRequest(String account) throws ContractException {
        final Function function = new Function(FUNC_GETADDGOVREQUEST, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public TransactionReceipt requestAddFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestAddFunctionToGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestAddFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(contractAddr), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(func), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getRequestAddFunctionToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public TransactionReceipt addAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void addAccountToGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getAddAccountToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public TransactionReceipt requestRemoveGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestRemoveGovernor(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestRemoveGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(account)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRequestRemoveGovernorInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public List getGovernorsToAdd() throws ContractException {
        final Function function = new Function(FUNC_GETGOVERNORSTOADD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt requestCreateGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(mode)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestCreateGroup(String group, BigInteger mode, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(mode)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestCreateGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(group), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(mode)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, BigInteger> getRequestCreateGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public TransactionReceipt requestSetThreshold(BigInteger newThreshold) {
        final Function function = new Function(
                FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint16(newThreshold)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestSetThreshold(BigInteger newThreshold, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint16(newThreshold)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestSetThreshold(BigInteger newThreshold) {
        final Function function = new Function(
                FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint16(newThreshold)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getRequestSetThresholdInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint16>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public List<RequestCreateGroupEventResponse> getRequestCreateGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTCREATEGROUP_EVENT, transactionReceipt);
        ArrayList<RequestCreateGroupEventResponse> responses = new ArrayList<RequestCreateGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestCreateGroupEventResponse typedResponse = new RequestCreateGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.mode = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestCreateGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTCREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestCreateGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTCREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestAddAccountToGroupEventResponse> getRequestAddAccountToGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTADDACCOUNTTOGROUP_EVENT, transactionReceipt);
        ArrayList<RequestAddAccountToGroupEventResponse> responses = new ArrayList<RequestAddAccountToGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestAddAccountToGroupEventResponse typedResponse = new RequestAddAccountToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestAddAccountToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestAddAccountToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestAddFunctionToGroupEventResponse> getRequestAddFunctionToGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTADDFUNCTIONTOGROUP_EVENT, transactionReceipt);
        ArrayList<RequestAddFunctionToGroupEventResponse> responses = new ArrayList<RequestAddFunctionToGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestAddFunctionToGroupEventResponse typedResponse = new RequestAddFunctionToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestAddFunctionToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestAddFunctionToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestRemoveAccountFromGroupEventResponse> getRequestRemoveAccountFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTREMOVEACCOUNTFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RequestRemoveAccountFromGroupEventResponse> responses = new ArrayList<RequestRemoveAccountFromGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestRemoveAccountFromGroupEventResponse typedResponse = new RequestRemoveAccountFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestRemoveAccountFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestRemoveAccountFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestRemoveFunctionFromGroupEventResponse> getRequestRemoveFunctionFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTREMOVEFUNCTIONFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RequestRemoveFunctionFromGroupEventResponse> responses = new ArrayList<RequestRemoveFunctionFromGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestRemoveFunctionFromGroupEventResponse typedResponse = new RequestRemoveFunctionFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestRemoveFunctionFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestRemoveFunctionFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<CreateGroupEventResponse> getCreateGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(CREATEGROUP_EVENT, transactionReceipt);
        ArrayList<CreateGroupEventResponse> responses = new ArrayList<CreateGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            CreateGroupEventResponse typedResponse = new CreateGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.mode = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeCreateGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(CREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeCreateGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(CREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<AddAccountToGroupEventResponse> getAddAccountToGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(ADDACCOUNTTOGROUP_EVENT, transactionReceipt);
        ArrayList<AddAccountToGroupEventResponse> responses = new ArrayList<AddAccountToGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            AddAccountToGroupEventResponse typedResponse = new AddAccountToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeAddAccountToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeAddAccountToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<AddFunctionToGroupEventResponse> getAddFunctionToGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(ADDFUNCTIONTOGROUP_EVENT, transactionReceipt);
        ArrayList<AddFunctionToGroupEventResponse> responses = new ArrayList<AddFunctionToGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            AddFunctionToGroupEventResponse typedResponse = new AddFunctionToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeAddFunctionToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeAddFunctionToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RemoveAccountFromGroupEventResponse> getRemoveAccountFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REMOVEACCOUNTFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RemoveAccountFromGroupEventResponse> responses = new ArrayList<RemoveAccountFromGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RemoveAccountFromGroupEventResponse typedResponse = new RemoveAccountFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRemoveAccountFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRemoveAccountFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RemoveFunctionFromGroupEventResponse> getRemoveFunctionFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REMOVEFUNCTIONFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RemoveFunctionFromGroupEventResponse> responses = new ArrayList<RemoveFunctionFromGroupEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RemoveFunctionFromGroupEventResponse typedResponse = new RemoveFunctionFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRemoveFunctionFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRemoveFunctionFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<InitWeightDataEventResponse> getInitWeightDataEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(INITWEIGHTDATA_EVENT, transactionReceipt);
        ArrayList<InitWeightDataEventResponse> responses = new ArrayList<InitWeightDataEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            InitWeightDataEventResponse typedResponse = new InitWeightDataEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.accounts = (List<String>) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.weights = (List<BigInteger>) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.threshold = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeInitWeightDataEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(INITWEIGHTDATA_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeInitWeightDataEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(INITWEIGHTDATA_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestSetThresholdEventResponse> getRequestSetThresholdEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTSETTHRESHOLD_EVENT, transactionReceipt);
        ArrayList<RequestSetThresholdEventResponse> responses = new ArrayList<RequestSetThresholdEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestSetThresholdEventResponse typedResponse = new RequestSetThresholdEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.threshold = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestSetThresholdEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTSETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestSetThresholdEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTSETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteSetThresholdEventResponse> getExecuteSetThresholdEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTESETTHRESHOLD_EVENT, transactionReceipt);
        ArrayList<ExecuteSetThresholdEventResponse> responses = new ArrayList<ExecuteSetThresholdEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ExecuteSetThresholdEventResponse typedResponse = new ExecuteSetThresholdEventResponse();
            typedResponse.log = eventValues.getLog();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteSetThresholdEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTESETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteSetThresholdEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTESETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestResetGovernorsEventResponse> getRequestResetGovernorsEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTRESETGOVERNORS_EVENT, transactionReceipt);
        ArrayList<RequestResetGovernorsEventResponse> responses = new ArrayList<RequestResetGovernorsEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestResetGovernorsEventResponse typedResponse = new RequestResetGovernorsEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.governors = (List<String>) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.weights = (List<BigInteger>) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestResetGovernorsEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTRESETGOVERNORS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestResetGovernorsEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTRESETGOVERNORS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteResetGovernAccountsEventResponse> getExecuteResetGovernAccountsEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTERESETGOVERNACCOUNTS_EVENT, transactionReceipt);
        ArrayList<ExecuteResetGovernAccountsEventResponse> responses = new ArrayList<ExecuteResetGovernAccountsEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ExecuteResetGovernAccountsEventResponse typedResponse = new ExecuteResetGovernAccountsEventResponse();
            typedResponse.log = eventValues.getLog();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteResetGovernAccountsEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTERESETGOVERNACCOUNTS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteResetGovernAccountsEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTERESETGOVERNACCOUNTS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestAddGovernorEventResponse> getRequestAddGovernorEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTADDGOVERNOR_EVENT, transactionReceipt);
        ArrayList<RequestAddGovernorEventResponse> responses = new ArrayList<RequestAddGovernorEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestAddGovernorEventResponse typedResponse = new RequestAddGovernorEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.reqId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestAddGovernorEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestAddGovernorEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DeleteAddGovernorReqEventResponse> getDeleteAddGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(DELETEADDGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<DeleteAddGovernorReqEventResponse> responses = new ArrayList<DeleteAddGovernorReqEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            DeleteAddGovernorReqEventResponse typedResponse = new DeleteAddGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDeleteAddGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDeleteAddGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApproveAddGovernorReqEventResponse> getApproveAddGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVEADDGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ApproveAddGovernorReqEventResponse> responses = new ArrayList<ApproveAddGovernorReqEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ApproveAddGovernorReqEventResponse typedResponse = new ApproveAddGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApproveAddGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApproveAddGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteAddGovernorReqEventResponse> getExecuteAddGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTEADDGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ExecuteAddGovernorReqEventResponse> responses = new ArrayList<ExecuteAddGovernorReqEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ExecuteAddGovernorReqEventResponse typedResponse = new ExecuteAddGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteAddGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteAddGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestRemoveGovernorEventResponse> getRequestRemoveGovernorEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTREMOVEGOVERNOR_EVENT, transactionReceipt);
        ArrayList<RequestRemoveGovernorEventResponse> responses = new ArrayList<RequestRemoveGovernorEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            RequestRemoveGovernorEventResponse typedResponse = new RequestRemoveGovernorEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestRemoveGovernorEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestRemoveGovernorEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DeleteRemoveGovernorReqEventResponse> getDeleteRemoveGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(DELETEREMOVEGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<DeleteRemoveGovernorReqEventResponse> responses = new ArrayList<DeleteRemoveGovernorReqEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            DeleteRemoveGovernorReqEventResponse typedResponse = new DeleteRemoveGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDeleteRemoveGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDeleteRemoveGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApproveRemoveGovernorReqEventResponse> getApproveRemoveGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVEREMOVEGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ApproveRemoveGovernorReqEventResponse> responses = new ArrayList<ApproveRemoveGovernorReqEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ApproveRemoveGovernorReqEventResponse typedResponse = new ApproveRemoveGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApproveRemoveGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApproveRemoveGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteRemoveGovernorReqEventResponse> getExecuteRemoveGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTEREMOVEGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ExecuteRemoveGovernorReqEventResponse> responses = new ArrayList<ExecuteRemoveGovernorReqEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ExecuteRemoveGovernorReqEventResponse typedResponse = new ExecuteRemoveGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteRemoveGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteRemoveGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApproveSingleEventResponse> getApproveSingleEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVESINGLE_EVENT, transactionReceipt);
        ArrayList<ApproveSingleEventResponse> responses = new ArrayList<ApproveSingleEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ApproveSingleEventResponse typedResponse = new ApproveSingleEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.txType = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApproveSingleEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApproveSingleEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DeleteSingleEventResponse> getDeleteSingleEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(DELETESINGLE_EVENT, transactionReceipt);
        ArrayList<DeleteSingleEventResponse> responses = new ArrayList<DeleteSingleEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            DeleteSingleEventResponse typedResponse = new DeleteSingleEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.txType = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDeleteSingleEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDeleteSingleEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogSetVoteWeightEventResponse> getLogSetVoteWeightEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(LOGSETVOTEWEIGHT_EVENT, transactionReceipt);
        ArrayList<LogSetVoteWeightEventResponse> responses = new ArrayList<LogSetVoteWeightEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            LogSetVoteWeightEventResponse typedResponse = new LogSetVoteWeightEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.voteWeight = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogSetVoteWeightEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGSETVOTEWEIGHT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogSetVoteWeightEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGSETVOTEWEIGHT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogRegisterEventResponse> getLogRegisterEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(LOGREGISTER_EVENT, transactionReceipt);
        ArrayList<LogRegisterEventResponse> responses = new ArrayList<LogRegisterEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            LogRegisterEventResponse typedResponse = new LogRegisterEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.txType = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.requestAddress = (String) eventValues.getIndexedValues().get(2).getValue();
            typedResponse.threshold = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogRegisterEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogRegisterEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogUnregisterEventResponse> getLogUnregisterEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(LOGUNREGISTER_EVENT, transactionReceipt);
        ArrayList<LogUnregisterEventResponse> responses = new ArrayList<LogUnregisterEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            LogUnregisterEventResponse typedResponse = new LogUnregisterEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.result = (Boolean) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogUnregisterEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogUnregisterEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogApproveEventResponse> getLogApproveEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(LOGAPPROVE_EVENT, transactionReceipt);
        ArrayList<LogApproveEventResponse> responses = new ArrayList<LogApproveEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            LogApproveEventResponse typedResponse = new LogApproveEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.who = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.b = (Boolean) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogApproveEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogApproveEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogUnapproveEventResponse> getLogUnapproveEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(LOGUNAPPROVE_EVENT, transactionReceipt);
        ArrayList<LogUnapproveEventResponse> responses = new ArrayList<LogUnapproveEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            LogUnapproveEventResponse typedResponse = new LogUnapproveEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.who = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.b = (Boolean) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogUnapproveEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogUnapproveEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogCanCallEventResponse> getLogCanCallEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(LOGCANCALL_EVENT, transactionReceipt);
        ArrayList<LogCanCallEventResponse> responses = new ArrayList<LogCanCallEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            LogCanCallEventResponse typedResponse = new LogCanCallEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.requestAddress = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogCanCallEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGCANCALL_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogCanCallEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGCANCALL_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<TransferAdminAuthEventResponse> getTransferAdminAuthEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(TRANSFERADMINAUTH_EVENT, transactionReceipt);
        ArrayList<TransferAdminAuthEventResponse> responses = new ArrayList<TransferAdminAuthEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            TransferAdminAuthEventResponse typedResponse = new TransferAdminAuthEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.oldAdmin = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.newAdmin = (String) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeTransferAdminAuthEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFERADMINAUTH_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeTransferAdminAuthEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFERADMINAUTH_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static AuthManager load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new AuthManager(contractAddress, client, credential);
    }

    public static AuthManager deploy(Client client, CryptoKeyPair credential, BigInteger mode, List<String> accounts, List<BigInteger> weights, BigInteger threshold) throws ContractException {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(mode), 
                accounts.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("address[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(accounts, org.fisco.bcos.sdk.abi.datatypes.Address.class)), 
                weights.isEmpty()?org.fisco.bcos.sdk.abi.datatypes.DynamicArray.empty("uint16[]"):new org.fisco.bcos.sdk.abi.datatypes.DynamicArray<org.fisco.bcos.sdk.abi.datatypes.generated.Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, org.fisco.bcos.sdk.abi.datatypes.generated.Uint16.class)), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint16(threshold)));
        return deploy(AuthManager.class, client, credential, getBinary(client.getCryptoSuite()), encodedConstructor);
    }

    public static class RequestCreateGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String group;

        public BigInteger mode;
    }

    public static class RequestAddAccountToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class RequestAddFunctionToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class RequestRemoveAccountFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class RequestRemoveFunctionFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class CreateGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String group;

        public BigInteger mode;
    }

    public static class AddAccountToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class AddFunctionToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class RemoveAccountFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class RemoveFunctionFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class InitWeightDataEventResponse {
        public TransactionReceipt.Logs log;

        public List<String> accounts;

        public List<BigInteger> weights;

        public BigInteger threshold;
    }

    public static class RequestSetThresholdEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger threshold;
    }

    public static class ExecuteSetThresholdEventResponse {
        public TransactionReceipt.Logs log;
    }

    public static class RequestResetGovernorsEventResponse {
        public TransactionReceipt.Logs log;

        public List<String> governors;

        public List<BigInteger> weights;
    }

    public static class ExecuteResetGovernAccountsEventResponse {
        public TransactionReceipt.Logs log;
    }

    public static class RequestAddGovernorEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public BigInteger reqId;
    }

    public static class DeleteAddGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ApproveAddGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ExecuteAddGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class RequestRemoveGovernorEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class DeleteRemoveGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ApproveRemoveGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ExecuteRemoveGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ApproveSingleEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger txType;
    }

    public static class DeleteSingleEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger txType;
    }

    public static class LogSetVoteWeightEventResponse {
        public TransactionReceipt.Logs log;

        public String voteWeight;

        public String contractAddress;
    }

    public static class LogRegisterEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public BigInteger txType;

        public String requestAddress;

        public BigInteger threshold;

        public String contractAddress;
    }

    public static class LogUnregisterEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public Boolean result;

        public String contractAddress;
    }

    public static class LogApproveEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public String who;

        public Boolean b;

        public String contractAddress;
    }

    public static class LogUnapproveEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public String who;

        public Boolean b;

        public String contractAddress;
    }

    public static class LogCanCallEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public String requestAddress;

        public String contractAddress;
    }

    public static class TransferAdminAuthEventResponse {
        public TransactionReceipt.Logs log;

        public String oldAdmin;

        public String newAdmin;
    }
}
